【问题标题】:Compilation time for different C++ features [closed]不同 C++ 功能的编译时间 [关闭]
【发布时间】:2019-09-17 09:50:14
【问题描述】:

不同 C++ 功能的编译时间是多少?我有兴趣选择正确的方法在我的库头文件中实现一些通用代码,并且我想考虑库用户的编译时间。粗略的和/或相对的数字就可以了。

我对以下案例特别感兴趣:

  • 添加类专业化
  • 添加 constexpr 函数(仅限声明)
  • 添加最简单的 constexpr 函数(如{ return true; }
  • 在编译时执行最简单的 constexpr 函数。
  • 实例化类模板
  • 实例化模板别名
  • 实例化变量模板
  • 找到正确的模板类专业化
  • 通过 ADL 找到正确的函数

附:请不要谈论我进行过早的优化。无论如何,C++ 开发人员都会对有关编译时间的信息感兴趣。

更新:澄清我正在优化的代码位于库头文件中,因此它的编译时间对库用户来说绝对重要。

更新:改写了问题,以免引发固执己见的答案。

【问题讨论】:

  • 编译器时间取决于实际编译器、它的版本以及传递给它的选项(如优化标志)。通常编译发生一次(除非您正在开发它的库),而它经常被使用。因此,对于您的库的用户而言,编译时间可能在他们的优先级列表中非常低。
  • @oliora 也许您还应该查看 Chiel 规则,了解您列出的某些内容的编译时间成本。
  • @Someprogrammerdude 是的,但是如果代码库的接口中公开了代码,那么它将被包含在多个翻译单元中并(重新)编译。
  • IMO,这个问题有一些技术答案,完全在 SO 的范围内。
  • @MaximEgorushkin 哦,好吧。我会在 Reddit 上这样做。在荷兰填写纳税申报单比问任何关于 SO 的简单问题都容易。

标签: c++ templates compilation compiler-optimization constexpr


【解决方案1】:

有没有关于不同 C++ 特性的编译时间的好资料?

此信息的原始来源是-ftime-report-ftime-trace 编译器选项。您可以使用它们来调查您感兴趣的时间。

请参阅Investigating compile times, and Clang -ftime-reporttime-trace: timeline / flame chart profiler for Clang 了解更多详情。

【讨论】:

  • 这是一个有价值的答案,但可能已经有可用的数字,所以我不需要自己做基准。
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
相关资源
最近更新 更多