【问题标题】:How to reduce compilation time with Boost MSM如何使用 Boost MSM 减少编译时间
【发布时间】:2014-06-06 16:53:22
【问题描述】:

我有大约 40 个转换的根状态机(包括四个子状态机)。一切运行良好,但是当我开始提高转换次数时,编译时间显着增加(大型状态机的开发变成了地狱)。我尝试使用 boost::msm::back::favor_compile_time 策略,并将子机拆分为多个翻译单元,但它没有效果。有人对这个问题有一些解决方法吗? Boost - 1.53,编译器 - MSVC 2012,处理器 - Intel i7


更新:减少时间的最佳方法 - 从项目中删除 boost msm

【问题讨论】:

  • 我只是好奇,你看到什么样的编译时间?
  • 主状态机和子机所有翻译单元的编译次数

标签: c++ visual-c++ boost boost-msm


【解决方案1】:

"但是没有效果"

我认为这个想法是拆分 TU 可以加快速度/因为/您并不总是需要重建 TU,也不一定是干净的重建会更快。

事实上,对于更多 TU,我预计(非并行化)构建会更慢,因为每个 TU 最终会在标头中包含 99% 的相同代码。预编译的头文件可以在一定程度上缓解这种情况。

在这方面,将相关标头(预处理器 #defines)添加到 stdafx 可能会有所帮助。

【讨论】:

  • 由于 boost msm 的性质,预编译的标头无济于事 - 很大一部分更改发生在标头(transition_table,模板操作)中,因此当标头更改时,预编译的标头将完全重建.
  • @asaenko 我知道 :) 但是,将其拆分为单独的 TUentails 将通用部分隐藏到源文件中。如果您仍然只是在标头中公开它,则您没有将任何内容拆分为 TU,您只需将其分散到多个 TU 上 - 从而增加编译时间。相信我,我知道,因为在编译器上编译 boost-spirit 重的东西可能更重:|无论如何,诀窍是:在某些时候你会想要编译器防火墙实现细节
猜你喜欢
  • 2011-01-16
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多