プログラムを (Linux で) 実行すると、すべてが物理メモリにロードされますか? もしそうなら、静的ライブラリの代わりに共有ライブラリを使用すると、キャッシングの点で役立ちますか? 一般的に、いつ共有ライブラリを使用し、いつ静的ライブラリを使用する必要がありますか? 私のコードは、問題があれば C または C++ で書かれています。
2 に答える
この記事のヒットは、あなたが望むものについてのまともな根拠をカバーしています. この記事では、共有ライブラリの利点についてさらに詳しく説明します
SOはこのトピックについても詳しく説明しています
上記のほとんどすべての記事は、共有ライブラリに偏っています。ウィキペディアは静的ライブラリを救おうとしています:)
ウィキより、
ライブラリを動的にリンクする代わりに実行可能ファイルに静的にリンクすることには、いくつかの利点があります。最も重要なのは、すべてのライブラリが存在し、それらが正しいバージョンであることをアプリケーションが確信できることです。これにより、依存関係の問題が回避されます。通常、静的リンクにより、パフォーマンスが大幅に向上します。
静的リンクにより、アプリケーションを単一の実行可能ファイルに含めることもできるため、配布とインストールが簡素化されます。
静的リンクでは、ターゲット実行可能ファイル (またはターゲット ライブラリ) によって直接的および間接的に参照されるライブラリの部分を含めるだけで十分です。
動的ライブラリでは、アプリケーションによってどの関数が呼び出されるかが事前にわからないため、ライブラリ全体がロードされます。この利点が実際に重要かどうかは、ライブラリの構造に依存します。
共有ライブラリは、さまざまなプログラム間で使用および「共有」できる機能がある場合に主に使用されます。その場合、すべてのプログラムがメソッドを取得する単一のポイントがあります。ただし、これにより、コンパイルされたプログラムがその特定のバージョンのライブラリに依存するようになるため、依存関係の問題が発生します。
静的ライブラリは主に、依存関係の問題が発生したくない場合や、ターゲット システムにインストールされている X または Y ライブラリをプログラムに気にさせたくない場合に使用されます。
では、どちらを使用しますか? そのためには、次の質問に答える必要があります。
- あなたのプログラムは、さまざまなプラットフォームまたは Linux ディストリビューションで使用されますか? (例: Red Hat、Debian、SLES11-SP1)
- 異なるバイナリで使用されているレプリケートされたコードはありますか?
- 将来、他のプログラムがあなたの仕事から利益を得ることができると思いますか?
これはケースバイケースの判断であり、万能の答えではないと思います。