系统要求某些基元与存储器内的某些点对齐(整数到4的倍数的字节,短于2的倍数的字节,等等).当然,可以对这些进行优化,以浪费最少的填充空间.

我的问题是为什么GCC不能自动做到这一点?是否缺少更明显的启发(从最大尺寸需求到最小尺寸的订单变量)?某些代码是否依赖于其 struct 的物理顺序(这是一个好主意)?

我之所以这么问,只是因为GCC在很多方面都是超级优化的,但在这一方面不是,我想肯定有一些相对酷的解释(对于这个解释,我是迟钝).

推荐答案

GCC不会对 struct 的元素重新排序,因为那样会违反C标准.C99标准的第6.7.2.1节规定:

在 struct 对象中,非位域成员和位域所在的单元

C++相关问答推荐

XV 6中的MLFQ和RR

在CIL中运行时,sscanf返回0

理解C中的指针定义

Apple Libm的罪恶功能

strftime函数中%s的历史意义是什么?为什么没有记录?

GCC预处理宏和#杂注GCC展开

为什么STM32G474RE上没有启用RCC PLL

CSAPP微型shell 实验室:卡在sigprocmask

防止C++中递归函数使用堆栈内存

tick.q中的Kdb+键控表语法

在for循环中指向数组开头之前

C:Assignment中的链表赋值从指针目标类型中丢弃‘const’限定符

从另一个宏函数调用C宏

问题:C#Define上的初始值设定项元素不是常量

存储和访问指向 struct 的指针数组

使用mmap为N整数分配内存

Linux Posix消息队列

浮点正零何时不全为零?

可以对两种 struct 类型中的任何一种进行操作的C函数

为什么实现文件中的自由函数默认没有内部链接?