当我分配一些内存时有什么区别:
float arr[3];
和
struct vals {
float x, y, z;
}
我知道在数组中分配内存时,它是连续的。但我对结构感到困惑......感觉会是这样,并且我已经用较少数量的结构成员进行了测试。 raylib here 的一个例子也让我充满信心。但是,是否存在任何边缘情况,即由于某些优化而分配的内存不连续或未按照相同的声明顺序分配?
对于具有相同类型的连续成员的结构体,它们很可能会在内存中连续分配,但不能保证。
此外,根据指针算术规则,这样做是有效的:
*(&arr[0] + 1) = 2.0;
但是如果你这样做会出现未定义的行为:
struct vals v;
*(&v.x + 1) = 2.0;