sizeof(char)始终为1,我认为类型的对齐需求不能大于其大小。摘自即将发布的C++11标准(3.11):
对齐是一个实现定义的整数值,表示给定对象可以分配的连续地址之间的字节数。
因此,如果类型的对齐要求大于其大小,则无法创建没有连续元素之间的空白空间的数组。
这种解释是否正确,即alignof(char)始终等于1?
sizeof(char)始终为1,我认为类型的对齐需求不能大于其大小。摘自即将发布的C++11标准(3.11):
对齐是一个实现定义的整数值,表示给定对象可以分配的连续地址之间的字节数。
因此,如果类型的对齐要求大于其大小,则无法创建没有连续元素之间的空白空间的数组。
这种解释是否正确,即alignof(char)始终等于1?
你是正确的。
从 C++ 数组的“紧凑”(无填充)布局可以推断出,任何对象类型都必须具有其大小的除数对齐方式,才能定义该类型的数组。
特别地,这种大小的类型的对齐方式必须为 1。
特别地,char
、signed char
和 unsigned char
的对齐方式为 1。
然而,通过这个论点,你不能推断出抽象类的对齐方式。
sizeof
运算符是根据数组中相邻元素之间的偏移量定义的,因此 alignof(X)
不能大于 sizeof(X)
,因为这意味着 X 的数组包含无效对齐的对象。同时,sizeof(X)
不一定表示对象的实际大小。例如,另一种类型的 X 成员或基础子对象可能使用少于 sizeof(X)
字节来存储,尽管我不知道任何实际使用的实现。
sizeof(char)==1
是根据定义的。 - Raymond Chenalignof
,而不是sizeof
。 - Sebastian Mach