2

プロセスが動的ライブラリの関数を必要とする場合、ライブラリ全体がメモリにロードされますか、それとも関数だけがロードされますか?

例: printf()libc (動的ライブラリであると仮定) の関数または任意の関数を使用する場合、libc 全体がメモリにロードされますか、それともprintf()関数のみがロードされますか?

4

1 に答える 1

1

ライブラリ全体がメモリにロードされますか、それとも関数だけがロードされますか?

答えは、「メモリにロードされた」とはどういう意味か、およびプログラムを実行しているオペレーティング システムによって異なります。

Linux と に対する典型的なリンクを考えてみましょうlibc.so

そこでは、プログラムの最初の命令が実行される前に、およびofをPT_LOAD含むセグメント全体がメモリに書き込まれます (プログラムはそのセクションで必要な情報を記録するため)。.data.textlibc.so.6mmap() libc.so.6.dynamic

それ以降は、アクセス時にコードがRAM に要求されてページングされます。を呼び出すとprintf、 のコードを含むページがprintfディスクからページインされるか、(より可能性が高い) バッファ キャッシュから再利用されます。

于 2013-05-06T03:47:32.200 に答える