TCMalloc 라이브러리에서 사용했던 강제 심볼 링크
프로그래밍 2012. 12. 8. 12:19
TCMalloc은 다른 라이브러리와는 다르게 해더파일의 추가 없이 강제 심볼 링크 기법을 이용해 편리하게 사용하도록 고안되었다.
#prgama comment(linker, "/include:__tcmalloc") // 강제 심볼 링크 선언하는 코드
-
__tcmalloc이란 뭘까?
TCMalloc 라이브러리 프로젝트에서 tcmalloc으로 검색해 보면 알겠지만,
다음과 같은 빈 함수이다.
extern "C" __declspec(dllexport) void _tcmalloc() {}
이것 만으로, 어떻게 뭐가 된다는 거지?라는 생각이 들어 좀더 분석해 보았다.
#pragma comment(linker, "/include:__tcmalloc")는 링커가 실행파일에 import table에 심볼을 등록할 수 있도록 알려준다.
물론 import table에 등록되는 방법은 두 가지가 있다. - 첫 번째, 흔히 사용했던 dll의 해더파일에 정의하고 함수들을 선언하고,
개발자들은 새로운 프로젝트에 그 해더파일을 포함시켜 사용하면 빌드시 자동으로 등록된다.
해더파일에는 다음과 같은 코드로 선언된다.
#ifdef dll_interface
extern "C"__declspec(dllexport) void _mytest(){}
#else
extern "C"__declspec(dllimport) void _mytest(){}
#endif
두 번째, #pragma comment(linker, "/include:__tcmalloc")와 같은 명령으로 링커가 등록할 수 있도록 알리는 방법.