Constructor 와 Destructor 는 main 함수가 실행되기 전에 호출되는 special function 이다.
main function 이 load 되기 전에 __libc_csu_init 함수에서 constructor 들이 호출된다.
포멧:
__attribute__((constructor))
__attribute__((destructor))
__attribute__(constructor (PRIORITY)))
__attribute__(destructor (PRIORITY)))
예제:
#include <stdio.h>
void begin (void) __attribute__((constructor));
void end (void) __attribute__((destructor));
int main()
{
printf("\nmain function\n");
return 0;
}
void begin()
{
printf("\nIn begin\n");
}
void end()
{
printf("\nIn end\n");
}
실행 결과:
root@cnode02-m:~/test# ./a.out
In begin
main function
In end
사용 예제:
jemalloc (http://www.canonware.com/jemalloc/) 은 glibc 에서 제공하는 malloc() 함수의 개선 버전이다. shared library 로 libjemallo.so 를 dynamic link 했을 때, 기존 glic의 malloc 을 jemalloc 으로 변경하기 위해서 constructor 가 호출된다.
# define JEMALLOC_ATTR(s) __attribute__((s))
JEMALLOC_ATTR(constructor)
static void
jemalloc_constructor(void)
{
malloc_init();
}
참조:
http://sunshout.tistory.com/1709
http://phoxis.org/2011/04/27/c-language-constructors-and-destructors-with-gcc/
http://llhuii.is-programmer.com/tag/elf