gpt4 book ai didi

c++ - 在C++中默认情况下结构体的内存是如何排列的?

转载 作者:行者123 更新时间:2023-11-30 04:41:35 28 4
gpt4 key购买 nike

如果我想在 C++ 中定义一个 Matrix 类,例如用于 OpenGL 渲染,我喜欢的方式也是最方便的,就是首先定义一个 Vector 类本身:

class vec3 {
double x;
double y;
double z;
[ ... ]
}

class vec4 {
double x;
double y;
double z;
double w;
[ ... ]
}

现在,据我所知,当我创建 vec{3|4} 时,x, y, z{, w} 的值应该在内存中是连续的(对吗? ??).

如果我这样创建我的矩阵:

class mat3 {
vec3 _m[3];
[ ... ]
}

class mat4 {
vec4 _m[4];
[ ... ]
}

矩阵类中每个 vector 的 x, y, z{, w} 的值是否总是彼此相邻在内存中 ?如果我将第一个元素的地址提供给 OpenGL,它读取内存中接下来的 16 个值(对于 4x4 矩阵),它会按顺序读取矩阵的 16 个值,还是可以从程序的其他地方获取一些其他信息在路上?

编辑(2019 年 11 月 29 日):修正了一个拼写错误

最佳答案

Would the values of x, y, z{, w} of each vector in the matrix class always be next to one another in memory ?

语言可能无法保证如此,但在实践中可能是连续的。

would it read the 16 values of the matrix

在 C++ 中未定义对成员进行索引的行为。 API 可能是用 C 编写的,可能有不同的规则。

有一个数据结构可以迭代,并且保证有 16 个相邻元素:16 个 double 组。

关于c++ - 在C++中默认情况下结构体的内存是如何排列的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59104102/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com