我想将项目设置从C++ 98切换到C++ 11,但由于额外的编译时间,我对此持怀疑态度.
我的(相当大的)项目大约有800个文件,项目是用cmake生成的.在使用C++ 98设置的XCode中,它在i7 4GHz机器(ssd硬盘,16GB内存)上大约15分钟编译.
当切换到C++ 11时,它需要大约25分钟(在Windows上使用Visual Studio 2013,情况更糟 - 几乎是时间的两倍!)
我不知道,在我的项目设置或我的文件中,某些东西必须完全错误,因为没有人在谈论使用C++ 11的额外编译时间.
是的,我正在使用前向声明,pimpl成语,甚至尝试过双重包括警卫,我删除了很多模板的东西,我不再需要C++ 11了(所以编译应该更快,但它不是 - 它是慢点!)
使用C++编译比使用C++ 98慢11?为什么没有人在谈论这个?
你的问题没有一般性答案,这是一个实施问题.
有些编译器比其他编译器更快.Phoronix声称Zapcc比竞争对手更快(但我不知道,我以前从未听说zapcc
过).
我猜想,对于相同的编译器,编译C++ 11样式可能比编译C++ 03样式慢(因为C++ 11引入了额外的"语法重载" auto
,并且像移动构造函数这样的功能可能需要额外的支持)
众所周知,C++ 11在编译时很慢,特别是因为标准头文件(如或
......)带来了大量材料(在C++ 11中可能比在C++ 03中更多).
例如,以下e.cc
文件(仅包含两个标准!):
#include#include
在编译时,g++ -std=c++11 -C -E e.cc | wc -l
我得到了41870个预处理行,在编译时g++ -std=c++03 -C -E e.cc | wc -l
我得到15598行,两者都是GCC 5.3,在Linux/Debian/Sid/x86-64上.
您可以使用预编译的头文件(请参阅此内容),您可以考虑使用不太小的翻译单元(例如,您的*.cc
文件每行包含几千行,而不是每行几十行).
由于cmake
生成Makefile
-s make
,您可以尝试使用并行构建make -j