C++ 防止展开特定循环

C++ 防止展开特定循环,c++,loops,C++,Loops,因此,关于如何告诉编译器展开特定循环,已经存在一个问题 我有一个项目使用了太多的模板,当我尝试在代码中的特定位置进行迭代时,内存就会耗尽。(例如,当打开浏览器窗口时,非迭代代码也会发生这种情况。) 我最好的猜测是编译器试图展开此循环,但由于内存耗尽,编译失败。我如何告诉编译器不要尝试展开该循环 我使用的是g++-4.7。这里有一个类似的问题:。显然,使用-save temps选项会有所帮助 听起来对我来说是个错误的解决方案。你确定它一开始就展开了吗?也许以某种方式简化/分解代码是更合适的解决方案

因此,关于如何告诉编译器展开特定循环,已经存在一个问题

我有一个项目使用了太多的模板,当我尝试在代码中的特定位置进行迭代时,内存就会耗尽。(例如,当打开浏览器窗口时,非迭代代码也会发生这种情况。)

我最好的猜测是编译器试图展开此循环,但由于内存耗尽,编译失败。我如何告诉编译器不要尝试展开该循环


我使用的是g++-4.7。

这里有一个类似的问题:。显然,使用-save temps选项会有所帮助

听起来对我来说是个错误的解决方案。你确定它一开始就展开了吗?也许以某种方式简化/分解代码是更合适的解决方案?我同意Mats的观点。您是否有一些递归模板(使用一些积分参数)?是的,预先存在的代码中充满了模板@马特斯·彼得森:我不确定它是否展开了,我将为此编辑我的问题。在那个项目之前,我还不熟悉模板。如果有任何技术可以帮助编译器处理繁重的模板化代码,请与我们分享-我知道这是一个常见的问题,但我还没有找到一个简单的解决方案。谢谢Cruentus_Nex!这是一个非常有用的评论!如果几天内没有人回答,我会把这个当作答案。我很感兴趣的是,如果你能给我一个关于正在发生什么以及为什么这有助于这里的参考的大纲,-save temps将预处理的中间文件永久保存在当前目录中,所以我的想法是GCC预处理它们,然后将它们转储到目录中,将它们收集起来用于编译阶段,与其使用内部预处理器一次完成所有工作,不如将编译有效地分为另一个阶段。因此,这基本上只是强制分离预处理和编译。你也许可以做同样的事情-没有集成的cpp btw。