带有数组的C结构的内存布局

sca*_*cai 5 c memory arrays struct

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

typedef struct 
{
  double array1[2];
} struct0_T;
Run Code Online (Sandbox Code Playgroud)

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

caf*_*caf 9

结构包含两个值.该存储器布局被.array1[0],随后.array1[1],任选地随后填充的一些量.

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

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

  • 数组不能有填充字节,结构可以。 (2认同)