加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如果从未调用过函数,编译器在创建程序时是否省略了该函数?

发布时间:2020-12-16 10:33:15 所属栏目:百科 来源:网络整理
导读:当编译器运行其优化时,它是否省略了从未调用过的函数?我记得读过一些不包含不必要文件的内容,因为它会在程序中造成不必要的膨胀,所以我只能从该语句中假设它在编译时确实包含了从未使用的所述函数,但我认为没有任何逻辑编译器不删除它们的原因我认为大多数
当编译器运行其优化时,它是否省略了从未调用过的函数?我记得读过一些不包含不必要文件的内容,因为它会在程序中造成不必要的膨胀,所以我只能从该语句中假设它在编译时确实包含了从未使用的所述函数,但我认为没有任何逻辑编译器不删除它们的原因我认为大多数现代编译器可能会删除额外的未使用函数.

解决方法

一般来说,答案是’不’.但是某些编译器会在某些特定情况下消除某些功能.并且链接器也不包括源文件中静态链接库的函数,其中不需要该文件中的函数.

通常被消除的一个常见情况是永远不会被调用的静态函数,并且从不采用谁的地址.另一个是静态函数,它在所有被调用的地方内联,并且从不采用谁的地址.

这完全取决于编译器.

但是,一般来说,这很难做到,因为编译器通常没有整个程序的视图来构建一个全面的调用图.并且链接器不够智能.

此外,某些文件可能最终成为库的一部分.并且库的整个目的是拥有一堆未从库本身调用的代码.编译器无法在编译时确定给定的代码段是否进入库.所以,这意味着对于具有“外部链接”的函数,如果不使用它们,则由链接器决定是否使用它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读