【发布时间】:2011-11-06 17:19:50
【问题描述】:
以这个结构为例:
struct Packing
{
int x; // 4-byte align
int y; // 4-byte align
short int z; // 2-byte align
char m; // 1-byte align;
char _pad[1]; // explicit padding
};
这个结构的大小是 12 字节。
那么应该将该结构存储在结构大小(12 字节)的倍数或 sizeof(int) 的倍数(结构成员之间的最大对齐要求)的地址中?
由于 12 的倍数也是 4 的倍数 (sizeof(int)) 我猜该结构将在地址 12 的倍数中正确对齐,但如果它是 4 字节对齐的,我可能会浪费不会浪费的空间。
编辑:在地址 0x00000012 处,结构将对齐,并且它的第一个成员也将对齐,因为 12 是 4 的倍数。 如果将其存储在地址 0x00000004 会怎样?在这种情况下,结构的第一个元素会对齐,但结构本身呢?
【问题讨论】:
-
您是否正在尝试编写可在多个编译器上运行的可移植代码?
-
should store this function,存储什么? -
__pad是一个反向标识符。 -
也是保留标识符
-
哦该死的 :) 是的,保罗说的。