优化模板代码编译
Optimize template code compilation
我有一个科学计算类的项目,核心算法是使用模板编程设计的。在顶层,它看起来像是函数的链式调用,基于配置为facade类组装主要类型并创建该类的实例。有几个,比方说,6个参数,产生了大约36个类的变体。正如你已经理解的那样,在普通电脑上编译需要花费20-30分钟(核心i7和加载内存到100%,8GB)的巨大时间。这就是为什么我需要在开发过程中将所有参数设置为一个值(6个变体),然后这是可以承受的。
问题是我如何在没有任何实质性入侵的情况下修复它?你认为预先编译每个标头会有帮助吗?
这里可能没有快速修复的解决方案,但您可以对代码库进行一些更改,这将有很大帮助。
-
确保您只在一个源文件中进行实例化,而不是在多个源文件。我无法从你的问题中判断出你是说整个项目需要20分钟编译还是一个源文件。
-
确保所有参数实际上是独立的。一个可以直接从另一个推断出来,也可以通过将一个参数映射到另一个参数的另一个模板类推断出来吗?
-
添加一个"模板间接寻址"级别,其中一个类没有所有参数。相反,它有一个或两个模板类型,每个模板类型都规定了行为的一部分,并且这些类型在源文件中只实例化一次。
相关文章:
- 在Linux for Windows上编译C++代码时出错
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在程序中编写脚本来编写和编译代码
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 在macos上编译代码的未解析符号
- 使用个人C++库编译代码时,与头文件一起使用时会中断
- 使用指针编译代码后,.cpp文件将变为随机字符
- VS Express 无法正确编译代码(?
- 如何在Ubuntu中使用Visual Studio代码编译C++代码
- 使用 Android NDK 使用 clang++ 编译C++代码时对"_Unwind_Resume"的未定义引用
- 无法使用两个包装不同下一层的ssl_stream编译代码
- 编译代码时"[Warning] extra tokens at end of"
- 无法编译代码,因为它已在 C++11 中弃用
- 如何在 Azure 应用服务中使用 cl.exe 编译 C++ 代码并生成可执行文件
- 如何调试编译 c++ 代码的 bazel?
- 为什么在使用转换构造函数编译代码时需要 const 复制构造函数?
- 编译 C++ 代码后尺寸较大
- 使用用 C++ 和 DDS 编写的 CMAKE 编译代码
- 编译代码时如何不制作二进制文件?
- 如何使用所有其他文件信息来编译代码,例如HAAR级联训练的权重的XML文件