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

一个相当简单的问题...目前,编译器往往会进行大量的优化。它们还会从最终输出中删除未使用的功能吗?



牛魔王的故事
浏览 760回答 3
3回答

大话西游666

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

江户川乱折腾

如果使用进行编译/Gy和链接,则MSVC(Visual Studio编译器/链接器)可以执行此操作/OPT:REF。如果您使用编译-ffunction-sections -fdata-sections并链接,那么GCC / binutils可以执行此操作--gc-sections。不了解其他编译器。

翻阅古今

通常,答案是:是:用于未使用的static功能。否:   用于未使用的全局可用功能。编译器不知道是否有其他编译单元引用它。同样,大多数对象模块类型不允许在编译后删除函数,也无法为链接器提供一种方法来判断是否存在内部引用。(链接程序可以告诉您是否存在外部链接程序。)某些链接程序可以执行此操作,但是有很多事情可以解决此问题。当然,除非它是共享库的一部分,否则任何链接程序都不会不必要地加载其自身模块中的函数。(显然,因为将来可能会在运行时引用它。)
打开App,查看更多内容
随时随地看视频慕课网APP