티스토리 뷰

etc

__init , __initdata, __exit, __exitdata

코로케 2013. 7. 26. 21:28

커널 소스코드 에서 자주 볼 수 있는 __init 와 __initdata 는 초기화시에만 사용하고 사용되지 않는 함수와 데이터를 지정할때 사용되어진다. 커널 소스코드의 include/linux/init.h 에 아래와 같이 정의되어 있다. 


include/linux/init.h 

#define __init        __section(.init.text)  __cold notrace

#define __initdata    __section(.init.data)


include/linux/compiler.h

#define    __section(S)   __attribute__  ((__section__(#S)))

 

컴파일러는 __init 로 지정된 함수와 __Initdata 로 지정된 데이터는 커널 초기화과정 이후에 해제되는 영역에 배치함으로서 쓸데없이 낭비되는 메모리 영역을 확보할 수 있다. 

단  주의점은 built-in 모듈에만 적용된다는 점이다. 커널에 모듈로서 적재되는 경우에는 __init, __initdata 는 별다른 동작을 하지 않는다 !!  


__exit, __exitdata 도 마찬가지로 커널소스에 built- in 된 경우에는 종료될때 필요한 함수나 변수를 호출할 필요가 없으므로 이에 해당하는 함수와 변수를 지정하기 위해서 사용되는 매크로이다.!!


관련 참고링크..

http://kldp.org/node/44174

http://blog.naver.com/PostView.nhn?blogId=wjdguddnr00&logNo=20018010170&parentCategoryNo=9&viewDate=&currentPage=1&listtype=0


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함