gpt4 book ai didi

c++ - 如果从未调用函数,编译器会在创建程序时忽略它吗?

转载 作者:太空狗 更新时间:2023-10-29 19:44:03 32 4
gpt4 key购买 nike

当编译器运行其优化时,它会忽略从未调用过的函数吗?我记得读过一些东西说不要包含不必要的文件,因为它会在程序中造成不必要的膨胀,所以我只能根据该声明假设在编译时它确实包含从未使用过的所述功能,但我没有看到任何逻辑编译器不删除它们的原因,我认为大多数现代编译器可能会删除额外的未使用函数。

最佳答案

一般来说,答案是否定的。但是有些编译器会在某些特定情况下去掉一些函数。并且链接器也不会包含源文件中不需要该文件中的函数的静态链接库中的函数。

一个通常被消除的常见情况是一个静态函数,它永远不会被调用,而且谁的地址也永远不会被占用。另一个是静态函数,它在任何被调用的地方都内联并且永远不会占用谁的地址。

这完全取决于编译器。

但是,一般来说,这很难做到,因为编译器通常无法查看整个程序来构建全面的调用图。而且链接器不够智能。

此外,一些文件可能最终成为库的一部分。图书馆的全部目的是拥有一堆不是从图书馆本身调用的代码。编译器无法在编译时确定一段给定的代码是否进入库。因此,这再次意味着对于具有“外部链接”的函数,如果不使用它们,则由链接器来删除它们。

关于c++ - 如果从未调用函数,编译器会在创建程序时忽略它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880954/

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