【发布时间】:2014-10-05 07:38:53
【问题描述】:
给出了对象表示的以下定义(3.9/4):
T类型对象的对象表示 是 N的序列 类型 T 的对象占用的 unsigned char 对象,其中 N 等于 大小(T)。
但是 3.9.1/1 说:
char、signed char和unsigned char占用相同数量的 存储并具有相同的对齐要求 (3.11);也就是说,他们 具有相同的对象表示。
看起来对象表示取决于对齐要求。但是我引用的定义中没有提到它。那就是两个相同大小的对象可能有不同的对象表示,是吗?
基本上,我问的是以下问题: 假设我们有两个大小相同的对象,其中一个对象的对齐方式与另一个不同。例如:
struct A
{
char a;
char b;
char c;
char d;
};
A a; //Object 1. alignof(a) = 1
int b; //Object 2. alignof(b) = 4
这些对象是否具有相同的对象表示?
【问题讨论】:
-
如果您有任何代码可以作为实际的激励示例,那将有所帮助。
-
@JohnZwinck 不幸的是,我没有。这纯粹是理论上的问题。
-
我很确定在另一种类型中手动指定对齐方式的类型会计算在内。
-
您是在问是否可以将 2 个相同大小的内存块表示为 2 个不同的类类型?或者您是在问同一个类是否可以通过不同的对齐方式以不同的方式表示?
-
@JohnZwinck 我提供了一个小例子来说明我在问什么。
标签: c++ language-lawyer memory-alignment