2011-03-05 19 views
2

私は10スタティックライブラリにリンクしています。スタティックライブラリエフェクトメモリの代わりに共有ライブラリを使用しますか?

ダイナミックライブラリを使用しているとバイナリファイルサイズが小さくなります。

ダイナミックライブラリを使用してもメモリ使用量は減少しません。

しかし、私のシニアは、共有ライブラリを使用するとメモリ使用量も削減できると教えてくれましたか?(同じ実行可能コードに対して複数のプロセスが実行されている場合)

この文は正しいですか?

彼は、ライブラリに使用されている関数のコピーが重複しないので、メモリ使用量が少なくなると私に言った。あなたがそのプロセスのインスタンスを作成するとき。

プロセスがフォークを開始すると、10人の子供がフォークします。だから静的ライブラリの代わりにダイナミックライブラリを使用すると、総メモリ使用量が削減されますか?

答えて

8

、動的ライブラリはあなたに多くを保存しません。最新のOSでプロセスをフォークすると、すべてのページが実際にコピーされるのではなく、コピー時にコピーとマークされます。したがって、静的ライブラリはすでに10個のプロセス間で共有されています。

ただし、保存できる場所は、同じプロセスのフォークではなく、異なるプロセス間でダイナミックライブラリを共有する場合です。したがって、別のプロセスと同じglibc.soを使用している場合、2つのプロセスはglibc.soの物理ページを共有しています。

+0

ハハ。私たちの答えがどれほど似ているのは面白いです。イタリック体の単語 "different"に至るまで。 –

+0

まあ、私は答えが本当に明白であると思います:) –

+0

@thanksは私の疑問を解決するためのものです。 :) –

4

ほとんどのオペレーティングシステムではコピーオンライトが使用されるため、特定のプロセスをフォークすると違いはありません。つまり、ページが更新された場合にのみコピーされるため、共有ライブラリ内のコードセグメントのようなものは影響を受けません。

一方、異なるプロセスは静的にリンクされているとコードを共有できません。 libcを考えてみましょう。すべてのバイナリリンクが...静的にリンクされていれば、数十部のprintfをメモリに格納してしまうでしょう。

あなたの主な理由がない限り、バイナリを静的にリンクしないでください。

関連する問題