2006年6月30日星期五

不同版本G++编译器的差异真是让人吃惊

  做了一个程序,测试用的,在一台RHEL AS 4.0的机器上做编译。编译完之后瞄了一眼文件大小,1837684。吓了一跳,因为我记得以前类似程序都在2M以上的,怎么这次小了这么多?难道我漏了几个模块?
  去正式服务器上找程序一对,果然,大小差了不少。正式服务器上的程序是在一台RH 7.3的机器上编译的。为了验证到底是源代码有不同还是编译器的差别,我把刚才编译的代码上传了一份到RH 7.3的机器上,用同一个Makefile编译,编译完的大小是2617012。
  对比了一下两边编译器的版本,RH 7.3这一台是2.96,RHEL AS 4.0那台是3.4.3。版本差别的确比较大,但编译的结果差别也真的不小。除开链接的库,单单看这个程序的.o文件,大小竟然差了一倍多。以前没有在这方面比较过,确实有点惊人。

  我又去找来了upx,2.00 for linux i386版本。用默认选项压缩的结果,更令我吃了一惊。RHEL AS 4.0这台上,压缩之后的大小是535802,而RH 7.3那台上的较大的那个执行程序,压缩之后只有384610,反而拥有较大的压缩比和较小的压缩后尺寸。
  不好解释了,也许是2.96的编译器生成的代码中,垃圾比较多,而有用的部分反而比较少吧。和内核的系统调用也许也有关系吧?两台机器的内核差别也挺大的,一个是2.4一个是2.6。

  记录下这个情况,以供参考。

没有评论:

发表评论