gpt4 book ai didi

c++ - 减少 cpp 翻译单元的数量是个好主意吗?

转载 作者:IT老高 更新时间:2023-10-28 21:45:07 27 4
gpt4 key购买 nike

我发现如果有很多类,当我为每个类使用一个 *.h 和一个 *.cpp 文件时,编译时间会显着增加。我已经使用了预编译的头文件和增量链接,但是编译时间仍然很长(是的,我使用了 boost ;)

于是我想出了以下技巧:

  • 将 *.cpp 文件定义为不可编译
  • 将 *.cxx 文件定义为可编译
  • 为每个应用添加了一个 *.cxx 文件模块,并在其中#include了该模块的所有*.cpp文件。

所以我最终只得到了 8 个翻译单元,而不是 100 多个翻译单元。编译时间缩短了 4-5 倍。

缺点是您必须手动包含所有 *.cpp 文件(但这并不是真正的维护噩梦,因为如果您忘记包含链接器会提醒您的内容),并且某些 VS IDE 便利性无法使用这个方案,例如转到/移至实现等。

所以问题是,拥有大量 cpp 翻译单元真的是唯一正确的方法吗?我的把戏是已知的模式,还是我遗漏了什么?谢谢!

最佳答案

这种方法的一个显着缺点是每个翻译单元都有一个 .obj 文件。

如果您创建一个静态库以在其他项目中重用,如果您有多个大型翻译单元而不是许多小型翻译单元,那么您通常会在这些项目中遇到更大的二进制文件,因为链接器只会包含包含函数/变量的 .obj 文件真正在使用该库的项目中引用。

如果翻译单元较大,则更有可能引用每个单元并包含相应的 .obj 文件。在某些情况下,更大的二进制文件可能会成为问题。也有可能一些链接器足够聪明,只包含必要的函数/变量,而不是整个 .obj 文件。

此外,如果包含 .obj 文件并包含所有全局变量,那么它们的构造函数/析构函数将在程序启动/停止时被调用,这肯定需要时间。

关于c++ - 减少 cpp 翻译单元的数量是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861707/

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