C89和C99标准中可执行文件大小的差异
我使用GCC制作了一个可执行文件C89和C99标准中可执行文件大小的差异,c,size,nm,C,Size,Nm,我使用GCC制作了一个可执行文件 $ gcc Q1.c -save-temps -std=c89 -o Q1 $ size Q1 text data bss dec hex filename 1509 264 8 1781 6f5 Q1 然后我就这么做了 $ gcc Q1.c -save-temps -std=c99 -o Q1 $ size Q1 text data bss dec
$ gcc Q1.c -save-temps -std=c89 -o Q1
$ size Q1
text data bss dec hex filename
1509 264 8 1781 6f5 Q1
然后我就这么做了
$ gcc Q1.c -save-temps -std=c99 -o Q1
$ size Q1
text data bss dec hex filename
1544 264 8 1816 718 Q1
什么可能导致程序的文本大小不同,可能的原因是什么?没有具体原因。由于更严格的标准,可能会有不同的优化。在我的计算机上:
-> % gcc test.c -save-temps -std=c89
-> % size a.out
text data bss dec hex filename
1093 568 8 1669 685 a.out
-> % gcc test.c -save-temps -std=c99
-> % size a.out
text data bss dec hex filename
1093 568 8 1669 685 a.out
这是高度经验性的。可能使用
-O
标志甚至会改变结果。该标准明确要求C99编译器生成的可执行文件比C89编译器的可执行文件更大。有什么具体原因吗?在不同的编译器下/编译到不同的体系结构下看到这一点也很有趣。可能只是GCC编译器中的优化程序针对不同的标准编写了不同的代码,因此这是特定于编译器的。尝试了相同的方法。。但我的输出与您的不同,我在C99标准中仍然获得了更大的文件大小。也许这与我们正在编译的程序有关。我将用一个简单的“地狱世界”程序来尝试这一点,并用结果来更新您。说真的,答案是这种差异背后没有任何理由。