我正在编写一个使用 boost::accumulators 和 Eigen 线性代数库的模板算法。 编译时,visual studio 编译器 (cl.exe) 的内存消耗峰值超过 2.5GB RAM,而我的 PC(Windows 7 32 位,具有 3GB 虚拟地址空间)变得无响应(相当长的时间:~1 分钟) .这些编译单元的二进制文件 (.obj) 为 10-20MB。
我的问题(不针对这些特定的库)
- 这是大量使用模板的代码的正常行为吗?
- 是否可以做些什么来减少内存需求和 编译时间?
- 如果没有很好的解决问题的方法,为什么不这样做 由设计编程语言的人提出?这 了解 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/