C89和C99标准中可执行文件大小的差异

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制作了一个可执行文件

$ 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标准中仍然获得了更大的文件大小。也许这与我们正在编译的程序有关。我将用一个简单的“地狱世界”程序来尝试这一点,并用结果来更新您。说真的,答案是这种差异背后没有任何理由。