带有数组的C struct的内存布局

假设我有一个C结构定义如下:

typedef struct { double array1[2]; } struct0_T; 

记忆是如何布局的? struct只能保持一个指针或两个双打的值吗? 在我认为struct有一个指针之前,但今天我发现(令我惊讶的是)值存储在那里。 它在不同的编译器之间有所不同吗?

该结构包含两个值。 内存布局为.array1[0] ,后跟.array1[1] ,可选地后跟一些填充量。

填充是唯一可以在编译器之间变化的部分(尽管在实践中,结构的唯一成员是数组,几乎肯定没有填充)。

虽然你可能听说C中的数组是一个指针,但事实并非如此 – 数组是一个由所有成员对象组成的聚合类型,就像结构一样。 几乎在所有表达式上下文中,数组都会计算出指向其第一个成员的指针。

上面的结构声明只是通知编译器该struct数据结构类型的变量将采用sizeof(struct0_T)字节的内存,并且一旦该类型的变量将被实例化,将分配该内存。

 struct0_T s; 

现在, s包含两个doubles数组。 在这种情况下将没有填充。