我正在考慮之間的標題只與頭&源設計。我不確定頭文件&源代碼是否允許編譯器跨目標文件和跨鏈接進行優化?如內聯優化?C編譯器能夠跨目標文件進行優化嗎?
0
A
回答
3
通常將頭文件和源文件編譯爲單個翻譯單元(因爲頭文件包含在源文件中)。所以,這不會是一個問題(除非你有一個獨特的環境,其中 頭被分別編譯)。
GCC支持跨不同翻譯單元進行優化。請參閱Link Time Optimization。
見-flto
選項的使用說明:
-flto [= N]
這個選項運行標準的鏈接時優化。當用 源代碼調用時,它將生成GIMPLE(GCC的內部 表示之一),並將其寫入對象 文件中的特殊ELF部分。當目標文件鏈接在一起時,所有功能 正文從這些ELF部分讀取並實例化,就好像它們的 已經是同一翻譯單元的一部分。要使用鏈接時間優化器 ,應在編譯時和最終鏈接期間指定-flto和優化選項。建議您 使用相同的 選項編譯參與同一鏈接的所有文件,並在鏈接時指定這些選項。
相關問題
- 1. C# - Visual Studio 2008能夠進行條件編譯嗎?
- 2. Can/do C編譯器能夠優化內聯函數的地址嗎?
- 3. 你能鏈接用不同優化級別編譯的目標文件嗎?
- 4. C++編譯器優化
- 5. 編譯器優化
- 6. 編譯器優化
- 7. 通過優化編譯的Xcode目標
- 8. 用優化標誌編譯C
- 9. 使用Visual Studio項目文件進行跨平臺編譯
- 10. C++編譯器能夠自動消除重複的代碼嗎?
- 11. 編寫代碼以幫助編譯器進行優化
- 12. 虛擬函數編譯器優化C++
- 13. 不C#編譯器優化空語句
- 14. C編譯器結構優化
- 15. C#編譯器優化循環?
- 16. C++ 0x優化編譯器質量
- 17. Delphi編譯器是否執行優化?
- 18. 這是由C#編譯器完成的優化嗎?
- 19. C++編譯器會優化未使用的返回值嗎?
- 20. Java編譯器優化
- 21. 克++編譯器的優化
- 22. 編譯器優化問題
- 23. 編譯器謂語優化
- 24. Requirejs優化器不編譯
- 25. 二郎編譯器優化
- 26. 編譯器優化實現
- 27. C/C++編譯器優化條件語句多少錢?
- 28. 什麼是/優化C#編譯器密鑰的目的?
- 29. 通過子範圍類型進行編譯器優化
- 30. C++編譯器能否自動優化float以使我翻倍?
編譯器只看到一個單獨的翻譯單元。所以不,它不是。但鏈接器可以。閱讀關於LTO。不管它是什麼:不要做過早的優化!編寫可維護的代碼,不要將定義放入頭文件中(除了'inline'函數,它只應該是短函數)。 – Olaf