c++ 未使用代码中的开销

我想知道在你的代码中有什么开销是没有使用的功能.

例如,您有一些调试日志记录,然后给大部分对象一个ToString()函数,该函数正在调试日志中使用.

在发布版本中,调试日志记录未被使用.那么它是否值得删除那些ToString()函数的源代码? (例如通过Macro?)

或者他们只是使可执行程序略大,否则不会影响性能?例如没有速度影响?或者编译器或链接器是否可能甚至在不使用函数的情况下删除这些函数?如果编译器或链接器不删除代码,那么ToString()函数是如何定义的呢?大概它会尝试内联代码,并且由于函数从不被调用,它会消失?

我想像每个函数都需要保留在一个静态的lib中,但是一旦编译成可执行文件,那么链接器肯定会忽略很多东西呢?

在另一个大致相似的注释中,如果编译器选择不嵌入内联函数,以便将内联函数定义为多个编译单元中的函数,链接器是否会删除多余的定义,并且只能在其末尾链接其中一个?

谢谢

这取决于编译器,我想,优化级别.

G和MSVC删除未使用的内联函数,但保留未使用的非内联函数.
例如,在普通程序中只使用一小部分STL.所有未使用的功能都被删除,因为它们被定义为内联.

另一方面,GCC保留所有功能,甚至不使用内联的功能.

回答你的另一个问题:如果一个函数在多个编译单元中被定义了,链接器将会皱眉并拒绝链接,除非它被定义为内联.

翻译自:https://stackoverflow.com/questions/6137573/overhead-in-unused-code

转载注明原文:c++ 未使用代码中的开销