C++ 数组和单独初始化之间的区别?

C++ 数组和单独初始化之间的区别?,c++,C++,假设我有这样一个“结构”: struct Vertex { float posX, posY, posZ; } 其中我声明了3个浮点值(约4字节)。所以这个“结构”总共是12个字节 但如果我这样写: struct Vertex { float pos[3]; } 我是否仍然获得与上面相同的效果?12字节?区别是什么?理论上,第一种情况允许编译器在各个字段之间添加填充,而第二种情况则不允许(数组必须是连续的元素序列) 因此,理论上,第一个struct可能占用更多空间,实际上它们

假设我有这样一个“结构”:

struct Vertex
{
    float posX, posY, posZ;
}
其中我声明了3个浮点值(约4字节)。所以这个“结构”总共是12个字节

但如果我这样写:

struct Vertex
{
    float pos[3];
}

我是否仍然获得与上面相同的效果?12字节?区别是什么?

理论上,第一种情况允许编译器在各个字段之间添加填充,而第二种情况则不允许(数组必须是连续的元素序列)

因此,理论上,第一个
struct
可能占用更多空间,实际上它们可能具有相同的大小/内存布局


显然,在第一种情况下,您可以使用三个成员的名称访问这些数据,而在第二种情况下,您将在
pos
成员上使用数组语法。

理论上,在第一种情况下,允许编译器在各个字段之间添加填充,而在第二种情况下,则不允许(数组必须是连续的元素序列)

因此,理论上,第一个
struct
可能占用更多空间,实际上它们可能具有相同的大小/内存布局


显然,在第一种情况下,您可以使用三个成员的名称访问这些数据,而在第二种情况下,您将在
pos
成员上使用数组语法。

我可以想到一个不同之处:如果您的变量的大小大于变量的大小,编译器将填充posX、posY和posZ,使它们很好地对齐。 当您进行二进制读/写时,它对您来说最重要


通常,使用某些填充有严重的性能原因,因为向处理器提供未对齐的数据可能会产生严重的后果。

我可以想到一个不同之处:如果变量的大小大于变量的大小,编译器将填充posX、posY和posZ,以使它们很好地对齐。 当您进行二进制读/写时,它对您来说最重要

通常,使用某些填充会导致严重的性能问题,因为向处理器提供未对齐的数据可能会产生严重的后果。

“所以所有这些‘结构’大约有12个字节。”可能。这取决于对齐和打包(虽然我相信在大多数情况下你是对的)。如果你需要知道,请询问编译器(使用
sizeof
)。“所以这个‘结构’总共大约有12个字节。”可能。取决于对齐和打包(虽然我相信在大多数情况下你是对的)。如果你需要知道,请询问编译器(使用
sizeof
)。