c - 带数组的 C 结构的内存布局

标签 c arrays memory struct

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

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

内存是怎么布局的? struct 是只保存一个指针还是两个 double 的值?之前我认为该结构包含一个指针,但今天我发现(令我惊讶的是)值存储在那里。不同的编译器之间是否有所不同?

最佳答案

该结构包含两个值。内存布局是 .array1[0],然后是 .array1[1],后面可以选择一些填充量。

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

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

关于c - 带数组的 C 结构的内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798894/

相关文章:

c - 对于整数数组 |a|和整数 |i|在 C 中,a[i] 给出与 i[a] 相同的结果

JavaScript ES6 : array of objects to array grouped by key and indexed by property

javascript - 映射两个数组中的值

tomcat - 一个Tomcat线程占用多少内存?

c - 显然 NULL 在包含的文件中是未知的

c - 分解 C 中的代码块

c - 64位系统,GINT_TO_POINTER(i)/GPOINTER_TO_INT(p)

c - 多播监听器接受另一个端口上的套接字

c - 是否每次都读取数组值作为循环停止条件?

.net - 生成报告时诊断 .NET OutOfMemoryException