在C语言中,结构体的打包是否有任何保证?例如,假设sizeof(double) == 8
,那么sizeof(struct { double x, y; }) == 16
是否有保障?请注意,本问题与严格的别名规则相冲突,因此请假设别名是禁用的,例如,在使用-fno-strict-aliasing
的gcc的情况下。
为避免进一步的猜测:本问题意在了解结构体与其明确打包的对应物的兼容性。请注意,即使在以下情况下,别名也是相关的:C结构体具有相同成员类型时是否保证在内存中具有相同布局? 。请不必担心我想要访问单个字节。
char *
可能比struct {char} *
更大,在这种情况下,该结构可能需要比_Alignof(char)
更大的对齐方式。 - EOF