基于相同的对齐 and/or 表示,一个对象的大小是否等于另一个对象的大小?

Is the size of an object equivalent to the size of another based upon the same alignment and/or representation?

C 标准状态(强调我的):

28 A pointer to void shall have the same representation and alignment requirements as a pointer to a character type.48) Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements. All pointers to structure types shall have the same representation and alignment requirements as each other. All pointers to union types shall have the same representation and alignment requirements as each other. Pointers to other types need not have the same representation or alignment requirements.

48) The same representation and alignment requirements are meant to imply interchangeability as arguments to functions, return values from functions, and members of unions.

Source: C11, §6.2.5/28

这里经常出现“相同的表示和对齐方式”的写法

但是同样大小呢?

我想知道这些指针对象之间在分配的大小方面是否存在差异,因为即使对齐和表示相同,指针对象的大小也会因指向的类型而异。

或者换句话说:是否可以保证如果对齐 and/or 表示相等,则大小也相等?

问题:


注释:


相关(关于指针示例):

C 2018 条款 6.2.6 标题为“类型的表示”,指定了类型的表示。第 2 段说:

Except for bit-fields, objects are composed of contiguous sequences of one or more bytes, the number, order, and encoding of which are either explicitly specified or implementation-defined.

由此可见,object 的表示是一个字节序列,该序列具有一定的字节数、一定的顺序和一定的编码。所以字节数、字节顺序和字节编码是表示的一部分。因此,如果两个 object 具有相同的表示,则它们具有相同的字节数、相同的顺序和相同的编码。

由于它们的字节数相同,因此它们的大小也相同。

举个例子,如果object X用字节A、B、C表示,objectY用字节A、B、C、D表示,那么X和 Y 没有相同的表示。

具有相同表示的两种类型并不暗示这两种类型需要具有相同的对齐要求,尽管这在实践中通常是正确的。

表示是指相似的对象值由相同的字节以相同的顺序表示。对齐告诉类型中最低字节的地址需要被什么整除。