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