给出以下结构
typedef struct
{
float3 position;
float8 position1;
} MyStruct;
我正在创建一个缓冲区,将其作为指向内核的指针传递,缓冲区将具有先前的缓冲区格式。
我明白在写入三个浮点数后我要在缓冲区中添加4个字节以获得下一个2的幂(16个字节),但我不明白为什么我要在写入之前另外添加16个字节position1的字节。否则我在position1中得到错误的值。
有人能解释我为什么吗?
答案 0 :(得分:5)
float8是8个浮点数的向量,每个浮点数为4个字节。这使得大小为32字节。根据{{3}},类型对齐的第6.1.5节,类型始终与其大小一致;所以float8必须是32字节对齐。同一部分还告诉我们float3需要4个字。此外,由于结构的sizeof被安排为允许结构的数组,因此它不会从重新排序这些特定字段中缩小。在更复杂的结构上,您可以通过将较小的字段保持在一起来节省空间。