所以说我有一个看起来像这样的结构 (事实证明,这在现实世界中很普遍):
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.fnord
和foo.quux
上进行快速对齐的操作,否则就不会一开始就对齐。
答案 0 :(得分:0)
按照标准的paragraph 6.2.5/20
数组类型描述了 连续分配的 非空集 具有特定成员对象类型的对象
(添加了强调。)因此,数组的元素在内存中始终是连续的。这是数组的定义特征之一。链接,存储类,其他数据结构的成员资格,数组本身或包含它的任何数据结构的对齐要求-这些都不影响数组元素的连续性。
数组的对齐要求通常是其元素类型的对齐要求的倍数,因此对齐数组本身也会对齐其所有元素。数组元素在任何情况下都不会单独对齐。