内容提要
本文介绍了微软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文件收集调试信息和消除重复数据。
如何提高构建编译时间的预测因素?
存储系统性能是构建编译时间改进的最佳预测因素。