做了一个程序,测试用的,在一台 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。
记录下这个情况,以供参考。
没有评论:
发表评论