Dim*_*nek 6 c arrays alignment
我总是使用以下范例来迭代C中的静态定义数组:
struct foo { ... };
struct foo array[10];
for (int i; i < sizeof(array) / sizeof(array[0]); i++)
...
Run Code Online (Sandbox Code Playgroud)
而且,到目前为止,每次都有效;-)
但令人惊讶的是,如果结构实际上长度不能自然对齐,那么这不会破坏,例如:
struct foo { long a; char b; };
Run Code Online (Sandbox Code Playgroud)
如果不是编译器决定,sizeof(struct foo) == 7而sizeof(array) == 32由于对齐(LP64数据模型)?
作为C99标准,第6.5.3.4节说明了sizeof运营商:
当应用于具有数组类型的操作数时,结果是数组中的总字节数.
和:
示例2 sizeof运算符的另一个用途是计算数组中元素的数量:
Run Code Online (Sandbox Code Playgroud)`sizeof array / sizeof array[0]`
所以数组的大小总是它的元素大小的倍数.
关于结构的同一段:
当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾部填充.