ヘッダーのみとヘッダー&のソースデザインの間で検討しています。ヘッダー&ソースでコンパイラがオブジェクトファイルとリンケージ間で最適化できるかどうかわかりませんか?インライン最適化など?Cコンパイラはオブジェクトファイル全体を最適化できますか?
0
A
答えて
3
ヘッダーファイルとソースファイルは、通常、ヘッダーがソースファイルに含まれているため、単一の翻訳単位としてコンパイルされます。したがって、それは問題ではありません( ヘッダーが別々にコンパイルされている独特の環境がない限り)。
GCCは、さまざまな翻訳単位にわたって最適化をサポートしています。 Link Time Optimizationを参照してください。
詳細については-flto
オプションのマニュアルを参照してください:-flto
[= n]は
このオプションは、標準のリンク時の最適化プログラムを実行します。 ソースコードで呼び出されると、GIMPLE(GCCの内部の 表現の1つ)が生成され、オブジェクト ファイル内の特別なELFセクションに書き込まれます。オブジェクトファイルがリンクされると、すべての関数 の本文がこれらのELFセクションから読み込まれ、 が同じ翻訳単位の一部であるかのようにインスタンス化されます。リンク時間 オプティマイザを使用するには、コンパイル時および最終リンク時に、-fltoおよび最適化オプションを指定する必要があります( )。 同じリンクに参加するすべてのファイルを同じ オプションでコンパイルし、リンク時にこれらのオプションも指定することをお勧めします。
関連する問題
- 1. C++コンパイラの最適化
- 2. Visual C++コンパイラの最適化
- 3. C/C++コンパイラはこのif文を最適化しますか?
- 4. C#JITコンパイラはヌルチェックを最適化しますか?
- 5. C++:コンパイラは&変数を最適化しますか?離れて?
- 6. Kotlinコンパイラはラッパー関数を最適化できますか?
- 7. コンパイラはメソッド呼び出しを最適化できますか?
- 8. C++コンパイラは "for"ループ内のif文を最適化できますか?
- 9. C#コンパイラ/最適化コマンドラインオプションはJITterに影響しますか?
- 10. 構造体またはクラス定義のコンパイラの最適化
- 11. 仮想関数コンパイラの最適化C++
- 12. C#コンパイラまたはJITのどのレベルでアプリケーションコードを最適化しますか?
- 13. IntelliJは、スカラプロジェクト全体のインポートを最適化します
- 14. 異なる最適化レベルでコンパイルされたオブジェクトファイルをリンクできますか?
- 15. C++コンパイラは未使用の戻り値を `reference`で最適化しますか?
- 16. グラム++コンパイラの最適化
- 17. CSSのコンパイラの最適化
- 18. コンパイラ述語の最適化
- 19. GNUコンパイラの最適化
- 20. コンストラクタのコンパイラの最適化
- 21. Javaコンパイラの最適化
- 22. Erlangコンパイラの最適化
- 23. BigDecimal:Javaコンパイラは乗算を1だけ最適化できますか?
- 24. プロジェクト「ポッド」 - Xcodeの9では、モジュール全体の最適化
- 25. コンパイラの最適化をどれだけ信頼できるか?
- 26. Doポインタはコンパイラの最適化を阻害しますか?
- 27. FPGA言語のコンパイラは最適化を実行しますか?
- 28. コンパイラは未使用のプライベートメソッドを最適化しますか?
- 29. コンパイラはいつマイコードを最適化するのですか?
- 30. コンパイラで構造体の関数呼び出しを最適化できますか?
コンパイラでは、1つの翻訳単位しか表示されません。そうではありません。しかし、リンカーはできます。 LTOについて読む。それが何であれ:時期尚早の最適化をしないでください!保守可能なコードを書いて、定義をヘッダに入れないでください(短い関数のみであるべき 'inline'関数を除く)。 – Olaf