sizeof总是doubleof的倍数?

Ann*_*inn 6 c++ sizeof memory-alignment

sizeof(Type)始终整除alignof(Type)

这样的陈述永远是真的吗? sizeof(Type) % alignof(Type) == 0

eer*_*ika 6

是的,sizeof(Type) % alignof(Type) == 0适用于所有类类型。

标准草案说:

[dcl.array] ... 数组类型的对象包含一个连续分配的非空 T 类型的 N 个子对象集。

[expr.sizeof] ...当应用于一个类时,结果是该类的对象中的字节数,包括将该类型的对象放置在数组中所需的任何填充。

为了对齐数组的每个元素,两个相邻元素之间的距离必须是对齐的倍数。sizeof被定义为这个距离。

有趣的是,对于窄字符类型以外的基本类型,sizeof只是实现定义:

[expr.sizeof] ... 应用于任何其他基本类型 (6.7.1) 的 sizeof 结果是实现定义的。

也就是说,我从未见过基本类型的大小不是其对齐倍数的系统。毕竟,它们也必须在数组中对齐。