数组和结构体的内存差异?

问题描述 投票:0回答:1

当我分配一些内存时有什么区别:

float arr[3];

struct vals {
    float x, y, z;
}

我知道在数组中分配内存时,它是连续的。但我对结构感到困惑......感觉会是这样,并且我已经用较少数量的结构成员进行了测试。 raylib here 的一个例子也让我充满信心。但是,是否存在任何边缘情况,即由于某些优化而分配的内存不连续或未按照相同的声明顺序分配?

c memory memory-management
1个回答
0
投票

对于具有相同类型的连续成员的结构体,它们很可能会在内存中连续分配,但不能保证。 此外,根据指针算术规则,这样做是有效的: *(&arr[0] + 1) = 2.0;

但是如果你这样做会出现未定义的行为:

struct vals v;
*(&v.x + 1) = 2.0;

© www.soinside.com 2019 - 2024. All rights reserved.