반응형
C언어를 이용하여 라이브러리를 만들거나 프로그램 시작/종료시 메모리를 관리하고 싶을 때 아래의 코드에서처럼
__attribute__((constructor)) 와 __attribute__((destructor)) 사용하면 유용할 것 같다.
단점으로는 gcc컴파일에서만 활용할 수 있다는 점이다.
아래의 코드는 실행결과 처럼 constructor -> main -> AAA() - > BBB() -> CCC() -> main -> destructor 순으로 실행된다.
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
31
|
#include <stdio.h>
void __attribute__((constructor)) constructor(void) {
printf("constructor\n");
}
void __attribute__((destructor)) destructor(void) {
printf("destructor\n");
}
void AAA(void) {
printf("AAA\n");
}
void BBB(void) {
printf("BBB\n");
}
void CCC(void) {
printf("ccc\n");
}
int main(int argc, const char * argv[]) {
printf("Main Start\n");
AAA();
BBB();
CCC();
printf("Main End\n");
return 0;
}
|
cs |
실행결과
constructor
Main Start
AAA
BBB
ccc
Main End
destructor
반응형
'C and C++' 카테고리의 다른 글
[C++][STL] vector의 메모리(capacity) 완벽하게 제거하기 feat. swap (0) | 2021.02.06 |
---|---|
[C++][STL] vector for문 올바로 사용하기 (0) | 2021.02.06 |
[C++][STL] STL을 활용하여 상한값 하한값 단순화 (0) | 2020.05.03 |
[C++] Template include 오류 해결 방법 (0) | 2020.04.26 |
[C++] 순환참조(Circular Dependency) 제거하는 방법 (1) | 2020.04.12 |