假设我有一个如下所示的结构 (事实证明,这在现实世界中很常见):
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 进行快速对齐操作,否则它一开始就不会对齐。
最佳答案
每paragraph 6.2.5/20标准的,
An array type describes a contiguously allocated nonempty set of objects with a particular member object type
(强调。)因此,数组的元素在内存中始终是连续的。这是数组的定义特征之一。链接、存储类、另一个数据结构中的成员资格、数组本身或包含数组的任何数据结构的对齐要求 - 这些都不会影响数组元素的连续性。
数组的对齐要求通常是其元素类型的倍数,因此对齐数组本身也会对齐其所有元素。在任何情况下,数组元素都不会受到单独对齐的影响。
关于c - 如果 char[] 位于 struct __attribute__((aligned)) 内部,则 char[] 的步长是否保证为 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53680196/