您的位置:首页 > 其它

内存对齐

2015-08-18 18:55 260 查看
typedef struct
{
char flag[3];
short value;
} sampleStruct;
union
{
char flag[3];
short value;
} sampleUnion;
假设 sizeof(char)=1,sizeof(short)=2,那么sizeof(sampleStruct) = 6 , sizeof(sampleUnion) = 4


字符类型占1字节, 可以从任何地址开始

short类型占2字节, 必须从2字节倍数地址开始

int类型占4字节,必须从4字节倍数地址开

字符型占用1字节,不需要字节对齐

short占用2字节,需要两字节对齐

所以sizeof(sampleStruct) = 3 *(1字节) + (1个补齐字节) + 1*(2字节) = 6

联合体

占用大小采用成员最大长度的对齐,最大长度是short的2字节

但 char flag[3]需要3个字节

所以 sizeof(sampleUnion) = 2*(2字节) = 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: