2

所以说我有一个这样的“结构”:

struct Vertex
{
    float posX, posY, posZ;
}

我已经声明了 3 个浮点(大约 4 字节)值。所以总的来说,这个“结构”大约有 12 个字节。

但如果我这样写:

struct Vertex
{
    float pos[3];
}

我仍然得到与上述相同的效果吗?12 字节?有什么区别?

4

2 回答 2

2

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

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

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

于 2012-12-16T17:36:48.940 回答
2

我能想到一个区别:如果你有一个大于变量大小的,编译器将填充 posX、posY、posZ 以使它们很好地对齐。当您进行二进制读/写时,它最多对您很重要。

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

于 2012-12-16T17:41:14.973 回答