(转)结构体struct && 联合union 内存分配
2012-10-15 11:46
253 查看
结构体的内存分配
结构体在内存中分配一块连续的内存,但结构体内的变量并不一定是连续存放的,这涉及到内存对齐。
原则1 数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
原则2 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
原则3 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
联合的内存分配
Union的大小为其内部所有变量的最大值,并且按照类型最大值的整数倍进行内存对齐。
原文地址:http://www.cnblogs.com/fly1988happy/archive/2012/04/12/2444408.html
结构体在内存中分配一块连续的内存,但结构体内的变量并不一定是连续存放的,这涉及到内存对齐。
原则1 数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
原则2 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。)
原则3 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
联合的内存分配
Union的大小为其内部所有变量的最大值,并且按照类型最大值的整数倍进行内存对齐。
原文地址:http://www.cnblogs.com/fly1988happy/archive/2012/04/12/2444408.html
相关文章推荐
- 结构体struct 和 联合union 内存分配
- c 函数传递参数 & 结构体内存分配
- 关于结构体的内存分配问题--sizeof(/*struct*/A)
- 关于union和struct的内存分配
- 结构体struct 联合体union 及内存对齐
- C++ 中struct,class及union 内存空间分配
- 结构体(Union)内存分配
- 结构体中的内存分配--struct dirent中引起的问题
- union struct的内存分配方式及其sizeof大小
- 大端小端区别、Union和Struct的内存分配
- 关于struct结构体内存分配的学习小结
- C语言中结构体(struct)和联合(union)的使用
- 结构体struct 联合体union 及内存对齐
- <复习>指针结构体内存分配
- 结构(struct)&联合(union)
- Union和Struct的内存分配
- 大端小端区别、Union和Struct的内存分配、对齐方式
- Union和struct的内存分配区别
- struct与union内存分配问题
- 大端小端区别、Union和Struct的内存分配