3 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
這取決于編譯器。Visual C ++ 9可以做到這一點(diǎn)- static在編譯階段刪除未使用的功能(甚至有C4505警告),可以在鏈接階段根據(jù)鏈接器設(shè)置刪除具有外部鏈接的未使用功能。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果使用進(jìn)行編譯/Gy和鏈接,則MSVC(Visual Studio編譯器/鏈接器)可以執(zhí)行此操作/OPT:REF。
如果您使用編譯-ffunction-sections -fdata-sections并鏈接,那么GCC / binutils可以執(zhí)行此操作--gc-sections。
不了解其他編譯器。

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
通常,答案是:
是:用于未使用的static
功能。
否: 用于未使用的全局可用功能。
編譯器不知道是否有其他編譯單元引用它。同樣,大多數(shù)對(duì)象模塊類型不允許在編譯后刪除函數(shù),也無(wú)法為鏈接器提供一種方法來(lái)判斷是否存在內(nèi)部引用。(鏈接程序可以告訴您是否存在外部鏈接程序。)某些鏈接程序可以執(zhí)行此操作,但是有很多事情可以解決此問(wèn)題。
當(dāng)然,除非它是共享庫(kù)的一部分,否則任何鏈接程序都不會(huì)不必要地加載其自身模塊中的函數(shù)。(顯然,因?yàn)閷?lái)可能會(huì)在運(yùn)行時(shí)引用它。)
- 3 回答
- 0 關(guān)注
- 818 瀏覽
添加回答
舉報(bào)