プログラムを実行すると(linuxで)、すべてが物理メモリにロードされますか?もしそうなら、静的ライブラリの代わりに共有ライブラリを使用して、キャッシュの面で助けていますか?一般的に、共有ライブラリはいつ使うべきですか、そしていつ静的ライブラリを使うべきですか?私のコードは、CまたはC++で書かれています。メモリと静的/共有ライブラリのプログラムの場所
答えて
このarticleヒットは、あなたが望むもののまともな地面をカバーします。このarticleはSOも偏っ
Difference between static and shared libraries?
When to use dynamic vs. static libraries
ほとんどすべての上記の記事が共有されているライブラリの深さでこのトピックをカバーしている共有ライブラリ
の利点についてより深くなります。ウィキペディアは
、wikiから静的ライブラリ:)
を救出しようとするいくつかの利点静的 実行ファイルにライブラリをリンクする代わりに、動的にリンクすることがあります。最も重要なのは、アプリケーションがすべてのライブラリが であることと、正しいバージョンであることを確認することができることです。 これにより、依存関係が回避されます。 問題。通常、静的リンクを使用すると、パフォーマンスが大幅に向上します( )。
静的リンクを使用すると、アプリケーション を単一の実行可能ファイルに含めることができ、配布の簡素化 とインストールが可能になります。
静的リンクでは、 によって直接的および間接的に参照されるライブラリの 部分をターゲット実行可能ファイル(またはターゲットライブラリ)に含めるだけで十分です。
ダイナミックライブラリでは、 の関数がアプリケーションによって呼び出されることは事前にわかっていないため、ライブラリ全体がロードされます( )。この利点が実際には であるかどうかは、ライブラリの構造によって異なります。
共有ライブラリは、ほとんどの場合、異なるプログラム間で「共有」できる機能がある場合に使用されます。その場合、すべてのプログラムがそのメソッドを取得する単一のポイントが得られます。しかし、コンパイルされたプログラムはその特定のバージョンのライブラリに依存しているので、依存関係の問題が発生します。
静的ライブラリは、主に依存性の問題が生じたくない場合や、ターゲットシステムにインストールされているXまたはYライブラリを気にする必要がない場合に使用します。
だから、どちらを使いますか?そのためには以下の質問に答えてください:
- あなたのプログラムは異なるプラットフォームまたはLinuxディストリビューションで使用できますか? (Red Hat、Debian、SLES11-SP1など)
- 異なるバイナリで使用されているコードを複製しましたか?
- 今後、他のプログラムがあなたの仕事から利益を得ることを想像していますか?
これはケースバイケースでの判断であり、一切の答えではありません。
- 1. 静的クラスメンバーの共有ライブラリ
- 2. ブースト - 「静的」vs「共有」ライブラリ
- 3. 共有ライブラリと静的ライブラリの技術的な違いは?
- 4. 潜在的に共有メモリの場所は何ですか?
- 5. 共有オブジェクト内の静的ライブラリの静的関数
- 6. 共有ライブラリ内の静的ライブラリのAndroid NDKコールAPI
- 7. 静的対動的CUDA共有メモリ割り当てのパフォーマンス
- 8. MinGWとの静的/動的/共有リンク
- 9. 共有ライブラリを意図した最終的な場所とは別の場所からリンクする
- 10. LLVMの静的ライブラリと共有ライブラリの両方をビルドするlibC++ 3.3
- 11. ビルド中に静的ライブラリを共有ライブラリにリンクしますか?
- 12. CMake:静的ライブラリを使用する共有ライブラリ
- 13. 静的ライブラリを共有ライブラリに変換しますか?
- 14. GNU libtoolで静的ライブラリと共有ライブラリの両方を作成しますか?
- 15. Djangoのテンプレートと静的ファイルの場所
- 16. 共有依存関係を持つ複数の静的ライブラリ - iOS
- 17. 共有場所にJavaオープンファイル
- 18. Android NDK共有ライブラリのコンパイル時に静的ライブラリをコンパイルできない
- 19. Android静的変数と共有設定
- 20. 静的ライブラリをテストするか、プロジェクト間で共有する
- 21. セマフォと共有メモリ
- 22. ビジュアルスタジオと共有メモリ
- 23. マップベースの場所を共有する
- 24. JavaとC++の共有メモリ
- 25. Mavenと共有ライブラリ
- 26. iPhoneとBlackBerryの共有ライブラリ
- 27. 共有コードとライブラリのユーザーストーリー
- 28. 静的ライブラリ内の静的ライブラリ
- 29. ウェブ庭/農場accross静的クラスデータを共有
- 30. あらかじめビルドされた静的ライブラリと共有ライブラリをAndroid NDKにリンクするときの問題