使用MSVC将C++头文件单元集成到Office中 (3/n)

使用MSVC将C++头文件单元集成到Office中 (3/n)

💡 原文英文,约1700词,阅读约需6分钟。
📝

内容提要

本文介绍了微软Office如何将C++头文件单元集成到Microsoft Word的构建中,并评估了对构建吞吐量的影响。通过迁移到头文件单元,构建吞吐量最好的情况下提高了21.3%,最差的情况下降低了0.9%。头文件单元不仅提高构建速度,还具有可移植性和较小的磁盘占用等优势。文章还提到了即将进行的改进,包括直接获取调试信息和消除重复数据。作者鼓励读者尝试集成C++模块或头文件单元,并与社区合作改进实现。

🔎

延伸解读

构建吞吐量提升的波动范围

迁移到头文件单元后,构建吞吐量最佳提升21.3%,最差下降0.9%。这一波动表明性能收益并非绝对,可能受代码库特性、硬件配置等因素影响。读者在评估迁移时,需结合自身项目进行基准测试,而非直接套用结果。

头文件单元的可移植性与磁盘优势

头文件单元生成的IFC文件可移植,可从云端下载,而预编译头文件必须本地生成和使用。此外,IFC文件显著更小:minpch的PCH为174 MB,头文件单元仅8.78 MB,减少95%;word_shared的PCH为1.16 GB,头文件单元111 MB,减少90%。这有助于节省存储和分发成本。

调试信息重复导致对象文件膨胀

使用头文件单元后,对象文件总大小增至1.22倍,中位数增加1.25倍,最大增加8000倍。原因是编译器将调试信息重复写入每个对象文件,尤其是两个大型枚举(分别有10000和30000个条目)。移除这些枚举后,总大小增加降至1.18倍,最大增加降至1700倍。

MSVC工具链的后续改进方向

微软计划更新工具链,使调试信息可直接从IFC文件收集,避免生成巨大对象文件。该优化同时适用于命名模块和头文件单元,但需要编译器、链接器和PDB写入器协同修改,目前尚无发布日期。此外,Office计划将更多低级库转为头文件单元,并消除全局'inc'文件夹。

❓

Q&A

C++头文件单元集成到Office的主要目的是什么?

主要目的是提高Microsoft Word的构建吞吐量和构建速度。

迁移到头文件单元后,构建吞吐量的变化如何?

在最佳情况下,构建吞吐量提高了21.3%,而在最差情况下下降了0.9%。

头文件单元相比于预编译头文件有哪些优势?

头文件单元具有可移植性、较小的磁盘占用和更快的构建速度等优势。

Word中使用的预编译头文件有哪些?

Word中使用的预编译头文件有minpch和word_shared,分别包含约250个和2500个文件。

即将进行的改进有哪些?

即将进行的改进包括直接从IFC文件收集调试信息和消除重复数据。

如何提高构建编译时间的预测因素?

存储系统性能是构建编译时间改进的最佳预测因素。

🏷️

标签

➡️

继续阅读