union和struct的大小计算
2017-11-22 17:33
477 查看
规则:
1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍;
2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍;同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。
3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的时候要求的对齐,对于本身大小的计算并没有关系。本身的大小只和其所包含的基本元素的对齐有关系。
例子一:
union U1
{
char a[9]; //对齐大小是1,大小是9个字节
int b; //对齐大小是4,大小是4个字节
};
所以该union的对齐大小是4个字节;大小为大于等于max(9,4)=9并为4的整数倍,所以是12字节。
例子二:
union U1_Another
{
char a[9]; //对齐大小是1,大小是9个字节
double b; //对齐大小是8,大小是8个字节
};
所以该union的对齐大小是8个字节,大小是大于等于9并为8的整数倍,即为16字节;
例子三:
union U2
{
U1 a; //对齐大小是4个字节,大小是12字节
double b; //对齐大小是8个字节,大小是8字节
};
所以该union的对齐大小是8个字节,大小是16;
例子四:
struct S1
{
char a[13]; //对齐大小是1字节,位置是[0,12]
double c; //对齐大小是8字节,位置是[16,23]
}
所以该结构体是8字节对齐,大小为24个字节;
例子五:
struct S2
{
S1 a; //对齐大小是8字节,位置是[0,23]
U1 b; //对齐大小是4字节,位置是[24,35]
};
所以该结构体的对齐大小是8字节,大小是40字节;
1,对于union,对齐的大小是最大的基本元素的对齐大小;对象的大小必须是该基本元素大小的整数倍;
2,对于struct,对齐的大小也是最大的基本元素的对齐大小,对象的大小需要考虑元素的对齐,并且需要是最大基本元素的整数倍;同时有#pragma pack修饰的情况,关于struct请详细参考另外一个帖子。
3,这里所说的struct和union的对齐,是指其作为其他复杂对象中的元素的时候要求的对齐,对于本身大小的计算并没有关系。本身的大小只和其所包含的基本元素的对齐有关系。
例子一:
union U1
{
char a[9]; //对齐大小是1,大小是9个字节
int b; //对齐大小是4,大小是4个字节
};
所以该union的对齐大小是4个字节;大小为大于等于max(9,4)=9并为4的整数倍,所以是12字节。
例子二:
union U1_Another
{
char a[9]; //对齐大小是1,大小是9个字节
double b; //对齐大小是8,大小是8个字节
};
所以该union的对齐大小是8个字节,大小是大于等于9并为8的整数倍,即为16字节;
例子三:
union U2
{
U1 a; //对齐大小是4个字节,大小是12字节
double b; //对齐大小是8个字节,大小是8字节
};
所以该union的对齐大小是8个字节,大小是16;
例子四:
struct S1
{
char a[13]; //对齐大小是1字节,位置是[0,12]
double c; //对齐大小是8字节,位置是[16,23]
}
所以该结构体是8字节对齐,大小为24个字节;
例子五:
struct S2
{
S1 a; //对齐大小是8字节,位置是[0,23]
U1 b; //对齐大小是4字节,位置是[24,35]
};
所以该结构体的对齐大小是8字节,大小是40字节;
相关文章推荐
- union和struct类型大小的计算
- struct和union大小的计算方法
- struct和union大小的计算方法
- c中union和struct类型的大小计算
- struct与union内存大小计算
- union和struct类型的大小计算
- union和struct类型的大小计算
- union和struct的大小计算
- 关于 Union,Struct and Class的大小计算问题的思考(转)&union和struct类型的大小计算(转)
- 关于Union,Struct and Class的大小计算问题
- union和struct类型的大小计算
- struct和union在内存中占用空间大小的计算
- union和struct类型的大小计算
- union和struct的大小计算
- union 与struct的空间计算
- C++中常见数据类型的sizeof值,以及计算struct和union的详细方法
- union struct的内存分配方式及其sizeof大小
- Struct和Union的sizeof计算
- 大小端区别、Union和Struct的内存大小
- struct 结构体类型的大小计算