struct sizeof
来源:互联网 发布:java 数据字典设计 编辑:程序博客网 时间:2024/05/21 11:07
struct sizeof
http://hi.baidu.com/chengui0327/item/22a2ee0449742413cc34ea47
1.struct MyStruct
{
double dda1;
char dda;
int type
};
为 上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好 为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分 配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用 sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof (int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起 始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个 字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8 1 3 4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。 所以整个结构的大小为:sizeof(MyStruct)=8 1 3 4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。字串3
2.
struct MyStruct
{
char dda;
double dda1;
int type
};
这个结构占用的空间为多大呢?在VC6.0环境下,可以得到sizeof(MyStruc)为24。结合上面提到的分配空间的一些原则,分析下VC怎么样为上面的结构分配空间的。(简单说明)
struct MyStruct
{
char dda;//偏移量为0,满足对齐方式,dda占用1个字节;
double dda1;//下一个可用的地址的偏移量为1,不是sizeof(double)=8
//的倍数,需要补足7个字节才能使偏移量变为8(满足对齐
//方式),因此VC自动填充7个字节,dda1存放在偏移量为8
//的地址上,它占用8个字节。
int type;//下一个可用的地址的偏移量为16,是sizeof(int)=4的倍
//数,满足int的对齐方式,所以不需要VC自动填充,type存
//放在偏移量为16的地址上,它占用4个字节。
};//所有成员变量都分配了空间,空间总的大小为1 7 8 4=20,不是结构
//的节边界数(即结构中占用最大空间的类型所占用的字节数sizeof 字串2
//(double)=8)的倍数,所以需要填充4个字节,以满足结构的大小为
//sizeof(double)=8的倍数。
所以该结构总的大小为:sizeof(MyStruc)为1 7 8 4 4=24。其中总的有7 4=11个字节是VC自动填充的,没有放任何有意义的东西。
- sizeof(struct)
- sizeof(struct)
- sizeof(struct)
- struct sizeof
- sizeof struct
- sizeof struct
- sizeof(struct)
- sizeof(struct)
- sizeof(struct)及sizeof(class)
- sizeof理解03---sizeof(struct)
- sizeof(struct)和sizeof(union)
- sizeof(struct)与sizeof(union)
- [转]sizeof(struct)
- sizeof struct&union
- sizeof计算struct大小
- sizeof union和struct
- union, struct , sizeof. 对齐
- sizeof struct 问题
- C/C++/JAVA/语法大PK——访问控制
- 从solaris explorer鉴别DISK 硬件故障识别方法
- ios 中生成随机数
- What is a "sosreport" and how do I create it in Red Hat Enterprise Linux 4.6 and later
- 基于移动终端(平板电脑、手机)的网络调查
- struct sizeof
- How to interpret the meanings of HDD LEDs
- 图像分割方法
- 如何快速方便的输出向量vector容器中不重复的内容
- SUN X4200 Server, All Leds of HDD0 is not lit
- weblogic 部署应用时一直停留在部署状态解决办法
- Oracle Licensing
- How to clear the FMA faults and error logs from Solaris
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。