系统要求某些基元与存储器内的某些点对齐(整数到4的倍数的字节,短于2的倍数的字节,等等).当然,可以对这些进行优化,以浪费最少的填充空间.
我的问题是为什么GCC不能自动做到这一点?是否缺少更明显的启发(从最大尺寸需求到最小尺寸的订单变量)?某些代码是否依赖于其 struct 的物理顺序(这是一个好主意)?
我之所以这么问,只是因为GCC在很多方面都是超级优化的,但在这一方面不是,我想肯定有一些相对酷的解释(对于这个解释,我是迟钝).
系统要求某些基元与存储器内的某些点对齐(整数到4的倍数的字节,短于2的倍数的字节,等等).当然,可以对这些进行优化,以浪费最少的填充空间.
我的问题是为什么GCC不能自动做到这一点?是否缺少更明显的启发(从最大尺寸需求到最小尺寸的订单变量)?某些代码是否依赖于其 struct 的物理顺序(这是一个好主意)?
我之所以这么问,只是因为GCC在很多方面都是超级优化的,但在这一方面不是,我想肯定有一些相对酷的解释(对于这个解释,我是迟钝).
GCC不会对 struct 的元素重新排序,因为那样会违反C标准.C99标准的第6.7.2.1节规定:
在 struct 对象中,非位域成员和位域所在的单元