c++ - 模板库的编译器内存消耗(boost + Eigen)

标签 c++ visual-studio templates boost eigen

我正在编写一个使用 boost::accumulators 和 Eigen 线性代数库的模板算法。 编译时,visual studio 编译器 (cl.exe) 的内存消耗峰值超过 2.5GB RAM,而我的 PC(Windows 7 32 位,具有 3GB 虚拟地址空间)变得无响应(相当长的时间:~1 分钟) .这些编译单元的二进制文件 (.obj) 为 10-20MB。

我的问题(不针对这些特定的库)

  1. 这是大量使用模板的代码的正常行为吗?
  2. 是否可以做些什么来减少内存需求和 编译时间?
  3. 如果没有很好的解决问题的方法,为什么不这样做 由设计编程语言的人提出?这 了解 C++ 的人越多,他们就越有可能使用模板,并生成难以编译的代码和臃肿的二进制文件。

最佳答案

If there is no good solution to the problem, why isn't this addressed by the people that design the programming language?

因为没有好的解决方案,句号

你说的问题与C++无关。它是 C 的人工制品——旧的“翻译单元”。解决这个问题需要重新做编译模型。 C++ 委员会 一直在尝试在不破坏现有 C++ 的每一行的情况下实现这一目标(这是一个更大的考虑因素),但这不是一个微不足道的问题。修复它需要进行大量更改。

此外,Clang 的性能方式更好,配备可变参数模板的较新版本的 GCC 也可以做到这一点。

关于c++ - 模板库的编译器内存消耗(boost + Eigen),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11282305/

相关文章:

c++ - for循环的小疑问

c++ - Intel cpu 上的 SIMD 前缀和

c++ - 在 Visual Studio 2012 中为 C++ CLR 支持的 DLL 项目将 .NET Framework 4.5 降级到 4?

templates - 一个专用 D 模板中的多种类型

c++ - 基于宏定义具有多种类型的一个变量的可能性

c# - 将 System::String^(C# 字符串)转换为 C++ std::string

c++ - 为什么在链接包含文件时 Visual Studio 出错?

c++ - 在对 tr1::bind() 的新调用中嵌套来自 tr1::bind() 的 tr1::bind<> 对象

c++ - 使用 boost::bind 但允许传递任何附加参数

c++ - 错误 : No matching function for call to memsetNincr