sizeof会永远是alignof的倍数吗?

时间:2019-01-27 02:13:52

标签: c++ sizeof memory-alignment

sizeof(Type)总是被alignof(Type)整除吗

这样该语句将始终为真? sizeof(Type) % alignof(Type) == 0

1 个答案:

答案 0 :(得分:2)

标准草案:

  

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

     

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

为了使数组的每个元素对齐,两个相邻元素之间的距离必须是对齐的倍数。 sizeof定义为该距离。所以是的,sizeof(Type) % alignof(Type) == 0对所有类类型都是正确的。

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

  

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

也就是说,我从未见过这样的系统,即基本类型的大小不是其对齐方式的倍数。毕竟它们也必须对齐排列。