我们在 UE5.5 项目里接入了官方推荐的 C++ 编译缓存方案。按照文档建议,目前在本地开发机的编译命令里增加了 -nopch,目的是提高缓存命中率。
实际现象是:
- 构建机(持续集成)上的缓存命中率整体很好;
- 如果不加
-nopch,本地几乎命中不了,推测是 PCH 中包含了绝对路径等信息,导致同一份代码在不同机器上命中失败; - 但从理性分析来看,完全关掉 PCH 会让每个 CPP 都重新编译那份很大的头文件,理论和实际上的观察都会大幅降低单次编译性能,我们现在也缺少一个量化指标去评估“关 PCH 换高命中率”到底值不值。
想请教几件事:
- 在 UE5.5 当前的工具链下,官方是否推荐在启用 C++ 编译缓存时一律加
-nopch?这个建议背后的技术原因是什么? - PCH 中是否确实包含绝对路径等导致跨机器 cache miss 的信息?有没有推荐的参数或配置,可以在保留 PCH 的前提下尽量提升缓存命中率?
- 官方是否有推荐的度量方式或经验值,用于评估:在团队开发环境中,关闭 PCH 带来的编译时间损失,和缓存命中率提升之间的取舍?例如:我们应该关注哪些统计指标(命中率区间、全量/增量编译时间等)来做决策?