C++ 提高编译速度(一) GCC预编译头

背景

项目规模大概是200万行代码,使用g++编译,但是速度较慢,尝试进行了一些编译速度优化的研究,取得一些效果,这里总结分享一下。

方法

1. 梳理编译单元
编译时,我们每一个cpp文件将会生成对应的一个.o目标单元,将小的编译单元合并成大的编译单元对编译速度会有显著的提升。
在这里插入图片描述
类似上图,用n.cpp 包含 a.cpp,b.cpp,用m.cpp包含c.cpp,d.cpp,将 4 个编译单元变成 2 个编译单元。
注意,这里我认为应该将修改频率低的文件进行编译单元合并,如果将高修改频率的cpp文件放入合并后的编译单元,那么每次修改这个文件都会导致包含这个大编译单元重新编译。
另外,合并的编译单元尽可能地有一定关联度,可以按照业务功能来划分,或者通过一些数据统计来划分。

2. 应用gcc预编译头
在这里插入图片描述
按照图2,当a,cpp b.cpp c.cpp都包含temp.h头文件时,在编译的时候,temp.h会被解析三遍,分别与a,b,c结合生成.o文件。这样我们可以预先对头文件进行编译,生成temp.h.gch文件,这样只需要解析一次temp.h,原来的a.cpp,b.cpp,c.cpp文件仍然include temp.h就好了,只是要最先包含temp.h。
编译时 -H 可以看到cpp文件的依赖信息,应用gch后 !temp.h.gch
在这里插入图片描述
在应用gch时,我的方法是:

  1. 先使用了include-what-you-use 这个开源工具,去除重复包含的头文件(也是一种优化)
  2. 分析路径下头文件的包含频率
  3. 筛选包含频率高但是改动频率小头文件,放在新的inc.h文件中
  4. 剔除cpp文件包含的上一步的头文件,并在cpp中首行插入#include “inc.h”
  5. 修改Makefile,修改依赖关系,编译时先对inc.h进行编译,生成最新的inc.h.gch

解决方案实现:

C++ 提高编译速度 (二) 解决方案实现 | 预编译头 多核编译

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值