一个相当简单的问题...目前,编译器往往会进行大量的优化。它们还会从最终输出中删除未使用的功能吗?
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 关注
- 759 浏览
添加回答
举报
0/150
提交
取消