基于相同的对齐 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 表示相等,则大小也相等?
问题:
- 一个对象的大小是否等于另一个基于相同对齐 and/or 表示的大小?
注释:
这个问题不仅仅针对指针对象。指针指导只是对我的心态的参考,因为它是一个很好的例子。
非常感谢对标准的引用。接受的答案必须引用标准。
设置是完全相同的具体实现。我不谈论不同实现之间的各种 alignments/representations/sizes 对象。
相关(关于指针示例):
Are there any platforms where pointers to different types have different sizes?
Is the sizeof(some pointer) always equal to four?
Does the size of pointers vary in C?
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 没有相同的表示。
具有相同表示的两种类型并不暗示这两种类型需要具有相同的对齐要求,尽管这在实践中通常是正确的。
表示是指相似的对象值由相同的字节以相同的顺序表示。对齐告诉类型中最低字节的地址需要被什么整除。
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 表示相等,则大小也相等?
问题:
- 一个对象的大小是否等于另一个基于相同对齐 and/or 表示的大小?
注释:
这个问题不仅仅针对指针对象。指针指导只是对我的心态的参考,因为它是一个很好的例子。
非常感谢对标准的引用。接受的答案必须引用标准。
设置是完全相同的具体实现。我不谈论不同实现之间的各种 alignments/representations/sizes 对象。
相关(关于指针示例):
Are there any platforms where pointers to different types have different sizes?
Is the sizeof(some pointer) always equal to four?
Does the size of pointers vary in C?
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 没有相同的表示。
具有相同表示的两种类型并不暗示这两种类型需要具有相同的对齐要求,尽管这在实践中通常是正确的。
表示是指相似的对象值由相同的字节以相同的顺序表示。对齐告诉类型中最低字节的地址需要被什么整除。