sizeof总是alignof的倍数吗

Will sizeof always be a multiple of alignof?

本文关键字:总是 alignof sizeof      更新时间:2023-10-16

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

这样这句话就永远是真的吗?sizeof(Type) % alignof(Type) == 0

是的,sizeof(Type) % alignof(Type) == 0对于所有类类型都为true

标准草案说:

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

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

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

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

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

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