2006年5月22日星期一

预编译头文件大幅度提高g++的编译速度(发表时间:2005-12-01)

今天晚上做了个实验,发现使用了预编译头文件之后,g++的编译速度有了质的飞跃。
用过Visual C++的朋友应该还记得有个叫stdafx.h的头文件是几乎每个vc程序都要包含的,这其实就是个预编译头文件(precompiled header)。今天就用同样的方法来提高g++编译的速度。
拿来试刀的是个很小的gtkmm程序test.cpp,长度67行,完成的功能就是加载一个glade的UI配置文件,然后处理几个按钮事件。别看它小,在我的牛机器上编译起来还真不快,肯定是预处理花了太多时间。看看它包含的头文件:
#include
#include

#include
现在把这几行从test.cpp中拿出来放到一个单独的头文件common.h(与test.cpp在同一目录)中,并在test.cpp的开头加入#include ”common.h“,替换掉原先三个头文件包含。
下面成预编译头文件:
$g++ -c `pkg-config --cflags libglademm-2.4` common.h
是不是很奇怪,头文件也能拿来编译。编译完生成一个common.h.gch文件,这就是预编译的头文件了,看一下大小,哇塞,46兆。这会明白编译为啥慢了吧。
接着再编译test.cpp:
$g++ `pkg-config --cflags --libs libglademm-2.4` test.cpp
速度明显加快。空口无凭,数据为证,下面是使用预编译头文件前后的所需时间对比:
使用前:
real 0m1.552s
user 0m1.385s
sys 0m0.129s
使用后:
real 0m0.381s
user 0m0.279s
sys 0m0.070s
仅仅用了个预编译头文件,编译速度就提高了如此之多,真的好有效果耶~~~

没有评论: