0

malloc がメイン プログラムにどのようにリンクされるかを知りたいです。基本的に、いくつかの静的ライブラリと動的ライブラリを使用するプログラムがあります。オプション「-llibName1 -llibName2」を使用して、これらすべてをメイクファイルに含めています。TCmalloc のドキュメントには、「LD_PRELOAD=/usr/lib64/libtcmalloc.so」を呼び出すだけで malloc をオーバーライドできると書かれています。これらすべての静的および動的ライブラリに対して tcamlloc が呼び出される方法を理解できません。 STL ライブラリと C++ の新規/削除操作にもリンクされますか? 誰でもこれについての洞察を教えてください。

4

1 に答える 1

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を参照する必要があります。

于 2012-04-26T19:00:41.920 に答える