Как tcamalloc связан с основной программой - PullRequest
0 голосов
/ 05 сентября 2011

Я хочу знать, как malloc связывается с основной программой. В основном у меня есть программа, которая использует несколько статических и динамических библиотек. Я включаю все это в свой make-файл, используя опцию "-llibName1 -llibName2".Документация TCmalloc говорит, что мы можем переопределить наш malloc, просто вызвав "LD_PRELOAD = / usr / lib64 / libtcmalloc.so". Я не могу понять, как tcamlloc вызывается для всех этих статических и динамических библиотек. Также как tcmallocтакже связан с библиотеками STL и операциями new / delete в C ++?Может кто-нибудь, пожалуйста, дайте какие-либо идеи по этому вопросу.

1 Ответ

0 голосов
/ 26 апреля 2012

«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 в качестве отправной точки для получения дополнительной информации.

...