c-如果char[]在结构__attribute__((对齐))内,那么char[]的步长是否保证为1



所以假设我有一个结构,看起来像这样(事实证明,在现实世界中很常见(:

struct foo {
char[24] bar;
uint32_t fnord;
uint32_t quux;
}__attribute__((aligned(4));

bar的步幅是什么,即&bar[1] - &bar[0]是什么,考虑到它在struct foo中?这对sizeof(foo)有影响,我很确定我想要它32,我还希望对foo.fnordfoo.quux进行良好的快速对齐操作,否则它一开始就不会对齐。

根据标准第6.2.5/20段,

数组类型描述了连续分配的非空的具有特定成员对象类型的对象

(添加了强调。(因此,数组的元素在内存中总是连续的。这是数组的定义特征之一。链接、存储类、在另一个数据结构中的成员资格、数组本身或包含它的任何数据结构的对齐要求——这些都不会影响数组元素的邻接性。

阵列的对齐要求通常是其元素类型的倍数,因此对齐阵列本身也会对齐其所有元素。在任何情况下,阵列元素都不受单独对齐的约束。

最新更新