gpt4 book ai didi

c++ - 压缩 .cpp 文件的缺点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:00 24 4
gpt4 key购买 nike

在 MSVC++ 中编译“静态库”项目时,我经常得到几 MB 大小的 .lib 文件。如果我使用条件宏并包含指令以在编译时将所有 .cpp 文件“压缩”到一个 .cpp 文件中,则 .lib 文件大小会显着减小。

这种做法有什么缺点吗?

最佳答案

Unity Builds 的主要问题在于它们打破了 C++ 的工作方式。

在 C++ 中,经过预处理的源文件称为翻译单元。一些符号是这个翻译单元的“私有(private)”符号:

  • 在命名空间级别声明为 static 的符号
  • 在匿名命名空间中声明的任何内容

如果您合并几个 C++ 文件,那么编译器将共享那些private 符号,这些private 符号自从它的从观点来看,这已成为一个单一翻译单元。

如果两个本地类突然同名,常量同名,你会得到一个错误。真烦人,但至少你会收到通知。

但是,对于函数,它可能会因为过载 而悄无声息地中断。当编译器选择 static void launch(short u); 来调用 launch(1) 时,突然它会转移到 static void launch( int i, Target t = "Irak");. 哎呀?

Unity Builds 很危险。您正在寻找的是 WPO(全程序优化)或 LTO(链接时间优化),查看编译器手册的内部结构以了解如何激活它。

关于c++ - 压缩 .cpp 文件的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9045246/

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