元素序列的对齐

时间:2014-07-31 11:44:08

标签: c++ alignment

描述对象指针类型的规则如下(3.7.4.3,N3797):

  

窄字符数组(3.9.1)中的元素序列,   其中序列的大小和对齐与某些序列的匹配   对象指针类型。

我认为序列的大小是序列中任何元素大小的总和。但是序列对齐的定义是什么?

3.11 / 1 N3797说:

  

对象类型具有对齐要求(3.9.1,3.9.2)   对该类型的对象可能的地址的限制   分配

序列是对象类型还是别的什么?

1 个答案:

答案 0 :(得分:2)

“对齐”是对象起始地址的对齐方式。

例如,如果对齐为4,则起始地址必须是4的倍数。

基本上这是一个硬件问题,当地址是4的倍数时,访问4字节对象更有效(可以在一次操作中直接完成)。在许多平台上,未对齐访问被视为失败。在Windows中,对于“某些体系结构”,可以通过使用或不使用SetErrorMode标志调用SEM_NOALIGNMENTFAULTEXCEPT来指定行为。


关于标准引用的段落,在可能将字节序列视为对象指针的上下文中,它必须至少与对象指针一样严格对齐。

如果没有,那么序列不可能是对象指针的表示,因此不可能构成对某事物的逻辑引用(为了垃圾收集的目的)。