当前位置:  开发笔记 > 编程语言 > 正文

使用C++编译比使用C++ 98慢11?

如何解决《使用C++编译比使用C++98慢11?》经验,为你挑选了1个好方法。

我想将项目设置从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?为什么没有人在谈论这个?



1> Basile Stary..:

你的问题没有一般性答案,这是一个实施问题.

有些编译器比其他编译器更快.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

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有