-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 岁,并且我还希望对 and 进行快速对齐的操作foo.fnordfoo.quux否则它一开始就不会对齐。

4

1 回答 1

0

根据标准的第 6.2.5/20 段

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

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

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

于 2018-12-08T06:58:35.940 回答