在MSVC++中编译"静态库"项目时,我经常会得到几MB大小的.lib文件.如果我在编译时使用条件宏并包含指令来"压缩"一个.cpp文件中的所有.cpp文件,则.lib文件大小会大大减少.
这种做法有什么缺点吗?
Unity Builds的主要问题是它们打破了C++的工作方式.
在C++中,源文件及其包含预处理的文件称为翻译单元.某些符号对此翻译单元是"私有的":
static在命名空间级别声明的符号如果合并多个C++文件,则编译器将在合并在一起的所有文件中共享这些私有符号,因为从它的角度来看,它已成为单个翻译单元.
如果两个本地类突然具有相同的名称,并且常量的同义词,则会出现错误.很烦人,但至少你会得到通知.
但是对于功能,它可能因为过载而无声地破坏.在编译器选择static void launch(short u);您的调用之前launch(1),突然它将转移到static void launch(int i, Target t = "Irak");.Oups?
Unity Builds很危险.您正在寻找的是WPO(整个程序优化)或LTO(链接时间优化),查看编译器手册的内部以了解如何激活它.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |