2011-09-05 1 views
0

malloc이 메인 프로그램에 어떻게 연결되는지 알고 싶습니다. 기본적으로 여러 정적 및 동적 라이브러리를 사용하는 프로그램이 있습니다.이 모든 것을 makefile의 "-llibName1"옵션을 사용하여 포함하고 있습니다. -llibName2 ". TCmalloc의 문서에 따르면 간단히 "LD_PRELOAD =/usr/lib64/libtcmalloc.so"를 호출하여 malloc을 재정의 할 수 있습니다. tcamlloc이 이러한 모든 정적 라이브러리와 동적 라이브러리를 호출하는 방식을 이해할 수 없습니다. tcmalloc 또한 STL 라이브러리 및 C++의 새로운/삭제 작업에 연결됩니까? 누구든지 이에 대한 통찰력을 주시기 바랍니다.tcamalloc이 메인 프로그램에 연결되는 방법

답변

0

"LD_PRELOAD =/usr/lib64/libtcmalloc.so"는 프로그램 외부에서 기호를 확인할 때 로더가 다른 공유 라이브러리보다 libtcmalloc.so를 사용하도록 지시하며 libtcmalloc.so는 "malloc" 즉 프로그램에서 사용할 버전입니다.

LD_PRELOAD 행을 생략하면 glibc.so (또는 시스템에있는 C 라이브러리)가 "malloc"이라는 심볼을 정의하는 첫 번째 공유 라이브러리가됩니다.

"malloc"이라는 심볼을 정의하고 (적절한 인수 등을 사용하는) 정적 라이브러리에 링크하거나 "malloc"이라는 심볼을 정의하는 다른 공유 라이브러리가로드되는 경우 프로그램은 해당 버전의 malloc을 사용합니다.

어쨌든 일반적인 아이디어입니다. 실제 진행은 매우 흥미 롭습니다. 자세한 내용은 시작 지점으로 http://en.wikipedia.org/wiki/Dynamic_linker으로 안내해야합니다.