gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:19:07 25 4
gpt4 key购买 nike

我想知道在您的代码中包含未使用的函数的开销是什么。

比如说你有一些调试日志,然后你给你的大部分对象一个 ToString() 函数,该函数在调试日志中使用。

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

或者他们只是让可执行文件稍微变大,否则不会影响性能?例如没有速度影响?或者编译器或链接器是否甚至可能删除不使用的函数?如果编译器或链接器不删除代码,如果 ToString() 函数是内联定义的呢?大概它会尝试内联代码,并且由于该函数从未被调用,它会消失?

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

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

谢谢

最佳答案

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

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

另一方面,GCC 保留所有函数,甚至是未使用的内联函数。

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

关于c++ - 未使用代码的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com