pax*_*blo 8 c iso alignment unions
最近我遇到了以下代码片段,它试图确保i(nad不再)的所有字节都可以作为以下各个元素访问c:
union {
int i;
char c[sizeof(int)];
};
Run Code Online (Sandbox Code Playgroud)
现在这似乎是一个好主意,但我想知道标准是否允许对齐要求的char限制比对的要求更严格int.
换句话说,是否可能有一个四字节的int,需要在一个四字节的边界上对齐,一个字节char(根据定义,一个字节,见下文)需要在十六进制对齐 - 边界?
这会填补上面联盟的使用吗?
有两点需要注意.
我正在特别谈论标准允许的内容,而不是一个理智的实现者/架构将提供什么.
我在ISO C意义上使用术语"字节",它是a的宽度char,不一定是8位.
没有类型可以具有比其大小更严格的对齐要求(因为数组如何工作),并且sizeof(char)是1.
如果不明显:
sizeof(T [N])是sizeof(T)*N.sizeof以...为单位char; 所有类型都表示为固定数量的bytes(char),该数字是它们的大小.有关详细信息,请参见6.2.6(类型表示).T A[2];,(char *)&A[1] - (char *)&A[0]等于sizeof A[0].T不大于sizeof(T)(事实上它是分开的sizeof(T))| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |