所以说我有一个这样的“结构”:
struct Vertex
{
float posX, posY, posZ;
}
我已经声明了 3 个浮点(大约 4 字节)值。所以总的来说,这个“结构”大约有 12 个字节。
但如果我这样写:
struct Vertex
{
float pos[3];
}
我仍然得到与上述相同的效果吗?12 字节?有什么区别?
所以说我有一个这样的“结构”:
struct Vertex
{
float posX, posY, posZ;
}
我已经声明了 3 个浮点(大约 4 字节)值。所以总的来说,这个“结构”大约有 12 个字节。
但如果我这样写:
struct Vertex
{
float pos[3];
}
我仍然得到与上述相同的效果吗?12 字节?有什么区别?
理论上,在第一种情况下,允许编译器在各个字段之间添加填充,而在第二种情况下则不允许(数组必须是连续的元素序列)。
因此,理论上第一个struct
可能会占用更多空间,实际上它们可能具有相同的大小/内存布局。
显然,在第一种情况下,您可以使用三个成员的名称访问此类数据,而在第二种情况下,您将在pos
成员上使用数组语法。
我能想到一个区别:如果你有一个大于变量大小的包,编译器将填充 posX、posY、posZ 以使它们很好地对齐。当您进行二进制读/写时,它最多对您很重要。
通常使用某些填充是出于严重的性能原因,因为向处理器提供未对齐的数据可能会产生严重后果。