1
54
|
2
17
下面是我在您描述的非常类似的场景(boost、模板、gcc)下所做的加速构建的工作
|
3
17
我想我们是在谈论 编译一个文件,即预编译头或本地磁盘问题不是问题。 使用深度模板代码(boost等)的长编译时间通常源于gcc在模板实例化时的不友好渐近行为,特别是当使用模板默认参数模拟可变模板时。 以下是一个文档,它将缩短编译时间命名为可变模板的动机: cpptruths发表了一篇文章,介绍了gcc-4.5如何在这方面做得更好,以及它如何出色地使用可变模板: IIRC然后BOOST有一种方法来限制伪变量的模板默认参数的生成,我认为“g++-DBOOST\u MPL\u limit\u LIST\u SIZE=10”应该可以工作(默认值是20) 更新: 更新: |
4
11
|
5
3
你应该有:
这会稍微改变您的OOP设计,但这是有益的:包括“ClsWithNoTemplates”的定义现在是 快速的 并且只(预)编译一次“ClsWithNoTemplates”的定义。
|
6
3
What techniques can be used to speed up C++ compilation times? 它将防止编译器在每次需要执行某项操作时都遵循头文件和实现链。 |
7
2
如果有很多文件,只要有一个包含所有其他.cpp文件的.cpp文件,就可以大大加快编译速度。当然,这需要您更加小心地使用宏,这样您就已经定义了每个文件,因为它们现在将对其他cpp文件可见。
|
8
1
实例化更少的模板和内联函数。尽可能多地预编译并链接它,而不是从头开始编译。确保您使用的是最新版本的GCC。
|
9
1
This paper 描述一种编译模板代码的方法,非常类似于“传统”的非模板对象文件。保存编译(&A);链接时间,每个模板实例化只有一行代码开销。 |
10
0
全部 (b)将编译器加载到每个源文件的内存中。 如果您有52个源(.cc)文件,其中每个文件#包含47个#包含(.h)文件,那么您将加载编译器52次,并将遍历2496个文件。根据文件中注释的密度,您可能会花费大量时间来吃掉无用的字符(在我见过的一个组织中,头文件的注释在66%到90%之间变化,只有10%-33%的文件是“有意义的”。要提高这些文件的可读性,最好的办法就是去掉最后的注释,只留下代码。) 仔细看看你的课程是如何组织起来的。查看是否可以合并源文件,并简化#include文件的层次结构。 几十年前,像IBM这样的公司就明白了这一点,他们会编写自己的编译器,这样编译器就可以得到一个要编译的文件列表,而不仅仅是一个文件,而且编译器只会被加载一次。 |
TCD · 标准库非类型模板类是否显式实例化? 2 年前 |
sovesti · 参数较少的模板函数中的演绎 2 年前 |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
Seymore Glass · 模板不工作的默认参数 2 年前 |
Alexander Daum · 模板参数中对模板类型的引用 6 年前 |
ledonter · 为什么注入的类名有时不被视为类模板中的模板名? 6 年前 |