【发布时间】:2012-10-11 19:47:56
【问题描述】:
我最近将我的 c++ 项目中的一些非常大的文件拆分为许多较小的文件(基本上每个类一个文件)。这使编译时间增加了一倍多,并将生成的可执行文件从 1.6mb 扩大到 2.4mb。为什么会产生如此巨大的差异?
这是必须在很多文件中包含一些标题而不是仅仅几个的直接结果吗?
编译器选项:
g++ -Wall -Wextra -g -ggdb -std=c++0x
我指的可执行文件大小是在运行 strip -s executable 之后。
尺寸:
带调试符号前:16MB
带调试符号后:26MB
没有调试符号之前:1.5MB
没有调试符号后:2.4MB
其他问题:
我已经在使用预编译的头文件,方法是将头文件放在 pch.hpp 中,然后在我的 g++ 标志中使用 -include pch.hpp 选项。这是使用 gcc 执行此操作的最佳方法吗?它似乎对编译时间的影响非常小。目前唯一没有被预编译的头文件是项目的一部分,并且随着项目的大量开发而可能发生变化。
【问题讨论】:
-
您是否确保在 .cpp 中添加尽可能多的包含?
-
启用 -flto 并重试。您现在正在创建许多对象。这增加了可维护性,但使编译器更难以优化。 -flto 是跨对象优化的优化选项
-
您是否使用构建系统(例如 CMake)来执行增量构建?