C++中对象的内存映像.ppt

C++中对象的内存映像.ppt

ID:48773714

大小:2.40 MB

页数:20页

时间:2020-01-23

C++中对象的内存映像.ppt_第1页
C++中对象的内存映像.ppt_第2页
C++中对象的内存映像.ppt_第3页
C++中对象的内存映像.ppt_第4页
C++中对象的内存映像.ppt_第5页
资源描述:

《C++中对象的内存映像.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++中对象的内存映像1内容数据成员变量在内存中的布局类在内存中的映像多态的实现机制集体讨论2typedefunsignedcharBYTE;enumColor{Red=0X01,Blue,Green,Yellow,Black};structcar{boolm_hasSkyLight;Colorm_color;boolm_isAutoShift;doublem_price;BYTEm_seatNum;};类型字节数char1bool1int4float4double8该结构体的对象在内存中占多少个字节?32位平台下15?332√4自

2、然对齐基本数据类型(short,int,double)的变量不能简单的存储于内存中的任意地址处,它们的起始地址必须能被它们占用的字节数整除。复合类型是由基本类型构成的,对象的起始地址要能够满足要求最严格的成员变量自然对齐的要求,如果类中有复合类型的成员变量,依次往后类推。除了整个对象要求自然对齐外,内部的成员变量也要自然对齐;编译器不仅考虑了单个对象的自然对齐要求,还考虑到了对象数组的对齐要求。5m_pricem_color??(填充)m_hasSkyLightm_isAutoShift??(填充)m_seatNum??(填充)0x

3、00031D10:0x00031D14:0x00031D18:0x00031D20:0x00031D28:4字节4字节8字节8字节8字节Car的内存布局TypedefunsignedcharBYTE;EnumColor{Red=0X01,Blue,Green,Yellow,Black};Structcar{boolm_hasSkyLight;Colorm_color;boolm_isAutoShift;doublem_price;BYTEm_seatNum;};204048:末尾填充?编译器按照成员变量声明的顺序分配空间。为满足各个

4、成员变量自然对齐的要求,可能会在末尾填充若干字节。对象本身的自然对齐取决于自然对齐要求最高的那个成员变量。6如上,编译器不会随便地在任意一个内存地址上创建一个C++/C的变量和对象,它们在内存中的首地址要满足一定的条件,数据成员也不是紧挨在一起的,而且每个成员的地址也不是随意安排的,都是经过了编译器的精心规划和计算,这样才能提高对象及其成员的访问效率。解决的办法按照成员变量所占字节从大到小的顺序依次声明。如果满足所有成员的自然对齐,内存将会有大量的浪费,如何有效的利用内存呢?7TypedefunsignedcharBYTE;enum

5、Color{Red=0X01,Blue,Green,Yellow,Black};Structcar{doublem_price;Colorm_color;boolm_hasSkyLight;boolm_isAutoShift;BYTEm_seatNum;};m_pricem_colorm_hasSkyLightm_isAutoShiftm_seatNum??填充0x00031010:0x00031018:0x0003101C:0x0003101D:0x0003101E:0x0003101C:4字节4字节8字节调整后的内存布局调整后,

6、对象所占内存变为16个字节,末尾只有一个填充字节。如果想将末尾填充的字节也利用了,可以吸收掉末尾的填充字节,在该例中,可以将m_seatNum设置为short型。综上所述,类的数据成员类型的选择,声明顺序即排列,采用的对齐方式,都将影响着对象的实际大小和访问效率。8在MSC++/C中,支持用户在代码中显示的指定复合类型的对齐方式,可用的对齐方式有1,2,4,8,16.复合类型对象在内存中创建后,每个成员本身的地址取决于它们相对于对象起始地址的偏移字节数,而这个偏移字节数不仅仅与排在它们前面的成员的大小有关,还与用户为这个对象类型指定

7、的成员对齐方式有关。#ifdef_MSC_VER#pramapack(push,4)//按4字节对齐#endiftypedefunsignedcharBYTE;enumColor{Red=0X01,Blue,Green,Yellow,Black};Structcar{boolm_hasSkyLight;Colorm_color;boolm_isAutoShift;doublem_price;BYTEm_seatNum;};#ifdef_MSC_VER#pragmapack(pop)#endifm_pricem_colorm_hasS

8、kyLightm_isAutoShiftm_seatNum0x00031D10:0x00031D18:0x00031D1C:0x00031D24:0x00031D14:4字节4字节8字节??填充??填充??填充4字节4字节4字节对齐映

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。