为什么GCC不优化结构?
系统要求某些原语与内存中的某些点对齐(整数字节是4的倍数,短到字节的倍数是2等)。 当然,这些可以进行优化,以减少填充中的最小空间。
我的问题是为什么GCC不会自动执行此操作? 更明显的启发式(从最大尺寸要求到最小的顺序变量)缺乏某种方式? 是否有一些代码依赖于它的结构的物理顺序(这是一个好主意)?
我只是问,因为海湾合作委员会是在很多方面超级优化,但没有在这一个,我认为必须有一些相对较酷的解释(我不知道)。
gcc不重新排序结构的元素,因为这会违反C标准。 C99标准的6.7.2.1节规定:
在一个结构对象中,非位字段成员和位字段所在的单元的地址增加了它们的声明顺序。
结构经常用作二进制文件格式和网络协议的打包顺序的表示。 如果完成了,这将会中断。 另外,不同的编译器会以不同的方式进行优化,并且将两者的代码链接在一起是不可能的。 这根本不可行。
GCC比我们大多数人从我们的源代码生产机器代码更聪明; 然而,如果它比我们更聪明地重新安排我们的结构,我就会发抖,因为它是可以写入文件的数据。 一个以4个字符开始,然后有4个字节的整数的结构在GCC决定重新排列结构成员的另一个系统上读取时是无用的。
链接地址: http://www.djcxy.com/p/15053.html