2012-04-11 12 views
0

プログラムを実行すると(linuxで)、すべてが物理メモリにロードされますか?もしそうなら、静的ライブラリの代わりに共有ライブラリを使用して、キャッシュの面で助けていますか?一般的に、共有ライブラリはいつ使うべきですか、そしていつ静的ライブラリを使うべきですか?私のコードは、CまたはC++で書かれています。メモリと静的/共有ライブラリのプログラムの場所

答えて

3

このarticleヒットは、あなたが望むもののまともな地面をカバーします。このarticleはSOも偏っ

Difference between static and shared libraries?

When to use dynamic vs. static libraries

ほとんどすべての上記の記事が共有されているライブラリの深さでこのトピックをカバーしている共有ライブラリ

の利点についてより深くなります。ウィキペディアは

wikiから静的ライブラリ:)

を救出しようとするいくつかの利点静的 実行ファイルにライブラリをリンクする代わりに、動的にリンクすることがあります。最も重要なのは、アプリケーションがすべてのライブラリが であることと、正しいバージョンであることを確認することができることです。 これにより、依存関係が回避されます。 問題。通常、静的リンクを使用すると、パフォーマンスが大幅に向上します( )。

静的リンクを使用すると、アプリケーション を単一の実行可能ファイルに含めることができ、配布の簡素化 とインストールが可能になります。

静的リンクでは、 によって直接的および間接的に参照されるライブラリの 部分をターゲット実行可能ファイル(またはターゲットライブラリ)に含めるだけで十分です。

ダイナミックライブラリでは、 の関数がアプリケーションによって呼び出されることは事前にわかっていないため、ライブラリ全体がロードされます( )。この利点が実際には であるかどうかは、ライブラリの構造によって異なります。

1

共有ライブラリは、ほとんどの場合、異なるプログラム間で「共有」できる機能がある場合に使用されます。その場合、すべてのプログラムがそのメソッドを取得する単一のポイントが得られます。しかし、コンパイルされたプログラムはその特定のバージョンのライブラリに依存しているので、依存関係の問題が発生します。

静的ライブラリは、主に依存性の問題が生じたくない場合や、ターゲットシステムにインストールされているXまたはYライブラリを気にする必要がない場合に使用します。

だから、どちらを使いますか?そのためには以下の質問に答えてください:

  1. あなたのプログラムは異なるプラットフォームまたはLinuxディストリビューションで使用できますか? (Red Hat、Debian、SLES11-SP1など)
  2. 異なるバイナリで使用されているコードを複製しましたか?
  3. 今後、他のプログラムがあなたの仕事から利益を得ることを想像していますか?

これはケースバイケースでの判断であり、一切の答えではありません。

関連する問題