未使用代码的开销

Coo*_*kie 12 c++ compiler-construction linker function overhead

我想知道代码中有未使用的函数的开销是多少.

比如说你有一些调试日志记录,然后你给大多数对象一个在调试日志中使用的ToString()函数.

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

或者他们只是使可执行文件略大,否则不会影响性能?例如没有速度影响?或者,如果不使用它们,编译器或链接器是否甚至可能删除它们?如果编译器或链接器没有删除代码,那么如果ToString()函数是内联定义的呢?据推测,它会尝试内联代码,因为函数永远不会被调用,它会消失吗?

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

另一个注意事项大致相似,如果编译器选择不内联内联函数,以便内联函数在几个编译单元中被定义为函数,那么链接器会丢掉多余的定义,并且最后只链接其中一个?

谢谢

use*_*016 5

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

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

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

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