全面介绍windows内存管理机制及c++内存分配实例

全面介绍windows内存管理机制及c++内存分配实例

ID:22513870

大小:773.50 KB

页数:50页

时间:2018-10-29

全面介绍windows内存管理机制及c++内存分配实例_第1页
全面介绍windows内存管理机制及c++内存分配实例_第2页
全面介绍windows内存管理机制及c++内存分配实例_第3页
全面介绍windows内存管理机制及c++内存分配实例_第4页
全面介绍windows内存管理机制及c++内存分配实例_第5页
资源描述:

《全面介绍windows内存管理机制及c++内存分配实例》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。本文目的:对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。本文内容:本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客的Windows内存管理及C++内存分配实例(二)(三)(四)(五)和(六)。1.      进程地址空间1.1地址空间·        32

2、64位的系统

3、CPU

4、        操作系统运行在硬件CPU上,32位操作系统运行于32位CPU上,64位操作系统运行于64位CPU上;目前没有真正的64位CPU。32位CPU一次只能操作32位二进制数;位数多CPU设计越复杂,软件设计越简单。       软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是232=4G,范围从0x00000000~0xFFFFFFFF。·        NULL指针分区范围:0x00000000~0x0000FFFF作用:保护内存非法访问例子:分配内存时,如果由于某种原因分配不成功,则返回空指针0x00000000;当用户继续使用比如改写数据时

5、,系统将因为发生访问违规而退出。        那么,为什么需要那么大的区域呢,一个地址值不就行了吗?我在想,是不是因为不让8或16位的程序运行于32位的系统上呢?!因为NULL分区刚好范围是16的进程空间。·        独享用户分区范围:0x00010000~0x7FFEFFFF作用:进程只能读取或访问这个范围的虚拟地址;超越这个范围的行为都会产生违规退出。例子:        程序的二进制代码中所用的地址大部分将在这个范围,所有exe和dll文件都加载到这个。每个进程将近2G的空间是独享的。注意:如果在boot.ini上设置了/3G,这个区域的范围从2G扩大为3G

6、:0x00010000~0xBFFEFFFF。·        共享内核分区范围:0x80000000~0xFFFFFFFF作用:这个空间是供操作系统内核代码、设备驱动程序、设备I/O高速缓存、非页面内存池的分配、进程目表和页表等。例子:       这段地址各进程是可以共享的。                                                                                                                                         注意:如果在boot.i

7、ni上设置了/3G,这个区域的范围从2G缩小为1G:0xC0000000~0xFFFFFFFF。       通过以上分析,可以知道,如果系统有n个进程,它所需的虚拟空间是:2G*n+2G(内核只需2G的共享空间)。 1.2地址映射·        区域区域指的是上述地址空间中的一片连续地址。区域的大小必须是粒度(64k) 的整数倍,不是的话系统自动处理成整数倍。不同CPU粒度大小是不一样的,大部分都是64K。区域的状态有:空闲、私有、映射、映像。在你的应用程序中,申请空间的过程称作保留(预订),可以用VirtualAlloc;删除空间的过程为释放,可以用VirtualF

8、ree。        在程序里预订了地址空间以后,你还不可以存取数据,因为你还没有付钱,没有真实的RAM和它关联。这时候的区域状态是私有;默认情况下,区域状态是空闲;当exe或DLL文件被映射进了进程空间后,区域状态变成映像;当一般数据文件被映射进了进程空间后,区域状态变成映射。·        物理存储器Windows各系列支持的内存上限是不一样的,从2G到64G不等。理论上32位CPU,硬件上只能支持4G内存的寻址;能支持超过4G的内存只能靠其他技术来弥补。顺便提一下,Windows个人版只能支持最大2G内存,Intel使用AddressWindowsExtensi

9、on(AWE) 技术使得寻址范围为236=64G。当然,也得操作系统配合。        内存分配的最小单位是4K或8K,一般来说,根据CPU不同而不同,后面你可以看到可以通过系统函数得到区域粒度和页面粒度。·        页文件页文件是存在硬盘上的系统文件,它的大小可以在系统属性里面设置,它相当于物理内存,所以称为虚拟内存。事实上,它的大小是影响系统快慢的关键所在,如果物理内存不多的情况下。       每页的大小和上述所说内存分配的最小单位是一样的,通常是4K或8K。·        访问属性物理页面的访问属性指的是对页

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

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

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