一個相當簡單的問題...目前,編譯器往往會進行大量的優化。它們還會從最終輸出中刪除未使用的功能嗎?
3 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
這取決于編譯器。Visual C ++ 9可以做到這一點- static在編譯階段刪除未使用的功能(甚至有C4505警告),可以在鏈接階段根據鏈接器設置刪除具有外部鏈接的未使用功能。

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
如果使用進行編譯/Gy和鏈接,則MSVC(Visual Studio編譯器/鏈接器)可以執行此操作/OPT:REF。
如果您使用編譯-ffunction-sections -fdata-sections并鏈接,那么GCC / binutils可以執行此操作--gc-sections。
不了解其他編譯器。

翻閱古今
TA貢獻1780條經驗 獲得超5個贊
通常,答案是:
是:用于未使用的static
功能。
否: 用于未使用的全局可用功能。
編譯器不知道是否有其他編譯單元引用它。同樣,大多數對象模塊類型不允許在編譯后刪除函數,也無法為鏈接器提供一種方法來判斷是否存在內部引用。(鏈接程序可以告訴您是否存在外部鏈接程序。)某些鏈接程序可以執行此操作,但是有很多事情可以解決此問題。
當然,除非它是共享庫的一部分,否則任何鏈接程序都不會不必要地加載其自身模塊中的函數。(顯然,因為將來可能會在運行時引用它。)
- 3 回答
- 0 關注
- 821 瀏覽
添加回答
舉報
0/150
提交
取消