【问题标题】:Does unnecessary C++ code end up in my completed program?不必要的 C++ 代码是否会出现在我完成的程序中?
【发布时间】:2020-07-03 00:39:14
【问题描述】:

假设我包含一个包含大量函数的头文件。

#include "1000Functions.h"

Function1(42);
Function2("Hello");
Function1000("geeks!");

但是,我只想使用标题中的一些函数。在预处理、编译和链接(例如,使用 g++)之后,我的程序会包含所有 1000 个函数,还是只包含我使用的 3 个?

【问题讨论】:

  • 假设我包含一个包含大量函数的头文件。 -- h 文件中的内容可能不是函数体,只有函数原型。
  • 一般来说,您“按使用量付费”。只有您使用的函数的目标代码才能出现在最终的可执行代码中。
  • 取决于编译器和编译器优化级别。一些编译器可能在最低优化级别上是懒惰的,并且把所有东西都扔进去(这是更快的构建)。在更高的优化级别,编译器将消除任何未使用的函数(链接器也会有所帮助)。您可以通过让编译器生成“映射”文件或所有函数的交叉引用来验证这一点。
  • 请阅读好的C++ programming book 然后是GCCGDB 的文档。另见this C++ reference

标签: c++ g++ c-preprocessor header-files


【解决方案1】:

我发现 this article 很有用。使用objdump -tC ProgramName 可以向您显示在您的程序加载到内存时最终会加载到 .text 中的不必要代码。

链接时间优化是我一直在寻找的,一旦我将这两个标签都添加到链接命令中,它就对我有用,而不仅仅是-flto

-O2 -flto

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2012-03-16
    • 1970-01-01
    • 2015-12-27
    • 2020-09-26
    相关资源
    最近更新 更多