什么是TMP缓慢的常见罪魁祸首

时间:2015-04-20 20:26:29

标签: c++ gcc clang template-meta-programming

我有一个项目,它使用了相当多的C ++模板元编程。这使编译时间变长。我知道我不能吃蛋糕并且也吃它但是我想知道如何减少编译时间的一些提示和技巧。我已经尝试过显式实例化,虽然这在某些情况下可能有所帮助,但很多时候,实例对于特定的编译单元是唯一的,在这种情况下,显式实例化无助于提供帮助。现在我们只谈论Clang做得很好。当我在G ++上尝试这个时,编译时间就会爆炸。对于一个文件,我放弃了等待它在45分钟后编译。

  • 模板元编程是否有任何常见的罪魁祸首,众所周知的事情往往是有问题的?我应该避免哪些技术,我应该做些什么呢?
  • 是否有任何地方认为GCC的表现比Clang差,有什么方法可以解决这个问题?

我主要使用普通的C ++ 11技术,但我没有使用Boost MPL或类似的库。

1 个答案:

答案 0 :(得分:0)

在我们的项目中,我们只是使用了思考和试验。即首先我们考虑“这里有什么复杂的模板”然后我们尝试隔离这些模板或删除它们或重构以查看编译时间是否发生变化。通常模板编译时间伴随着内存使用量的增加,我甚至报告过一次gcc bug(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54056)。

使用-Q命令行开关(显示gcc当前编译的函数)有几次帮助了几次。例如。对于上面链接的bug,很明显gcc放慢了那些有缺陷的模板。