为了账号安全,请及时绑定邮箱和手机立即绑定

未使用的功能是否得到优化?

未使用的功能是否得到优化?

C++ C
牛魔王的故事 2019-11-30 14:40:52
一个相当简单的问题...目前,编译器往往会进行大量的优化。它们还会从最终输出中删除未使用的功能吗?
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

这取决于编译器。Visual C ++ 9可以做到这一点- static在编译阶段删除未使用的功能(甚至有C4505警告),可以在链接阶段根据链接器设置删除具有外部链接的未使用功能。


查看完整回答
反对 回复 2019-11-30
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

如果使用进行编译/Gy和链接,则MSVC(Visual Studio编译器/链接器)可以执行此操作/OPT:REF。


如果您使用编译-ffunction-sections -fdata-sections并链接,那么GCC / binutils可以执行此操作--gc-sections。


不了解其他编译器。


查看完整回答
反对 回复 2019-11-30
?
翻阅古今

TA贡献1780条经验 获得超5个赞

通常,答案是:

是:用于未使用的static功能。

否:   用于未使用的全局可用功能。

编译器不知道是否有其他编译单元引用它。同样,大多数对象模块类型不允许在编译后删除函数,也无法为链接器提供一种方法来判断是否存在内部引用。(链接程序可以告诉您是否存在外部链接程序。)某些链接程序可以执行此操作,但是有很多事情可以解决此问题。

当然,除非它是共享库的一部分,否则任何链接程序都不会不必要地加载其自身模块中的函数。(显然,因为将来可能会在运行时引用它。)


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 759 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信