全面介绍windows内存管理机制及c++内存分配实例(三):虚拟内存

全面介绍windows内存管理机制及c++内存分配实例(三):虚拟内存

ID:14980753

大小:149.90 KB

页数:14页

时间:2018-07-31

全面介绍windows内存管理机制及c++内存分配实例(三):虚拟内存_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《全面介绍windows内存管理机制及c++内存分配实例(三):虚拟内存》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、合用来管理大型对象或数据结构。比如说,电子表格程序,有很多单元格,但是也许大多数的单元格是没有数据的,用不着分配空间。也许,你会想到用动态链表,但是访问又没有数组快。定义二维数组,就会浪费很多空间。它的优点是同时具有数组的快速和链表的小空间的优点。 ·       分配虚拟内存如果你程序需要大块内存,你可以先保留内存,需要的时候再提交物理存储器。在需要的时候再提交才能有效的利用内存。一般来说,如果需要内存大于1M,用虚拟内存比较好。 ·       保留用以下Windows函数保留内存块VirtualAlloc(PVO

3、ID开始地址,SIZE_T大小,DWORD类型,DWORD保护属性)一般情况下,你不需要指定“开始地址”,因为你不知道进程的那段空间是不是已经被占用了;所以你可以用NULL。“大小”是你需要的内存字节;“类型”有MEM_RESERVE(保留)、MEM_RELEASE(释放)和MEM_COMMIT(提交)。“保护属性”在前面章节有详细介绍,只能用前六种属性。如果你要保留的是长久不会释放的内存区,就保留在较高的空间区域,这样不会产生碎片。用这个类型标志可以达到:MEM_RESERVE

4、MEM_TOP_DOWN。C++程序:

5、保留1G的空间LPVOIDpV=VirtualAlloc(NULL,1000*1024*1024,MEM_RESERVE

6、MEM_TOP_DOWN,PAGE_READWRITE);if(pV==NULL)cout<<"没有那么多虚拟空间!"<9、RITE);if(pP==NULL)cout<<"没有那么多物理空间!"<

10、MEM_COMMIT一次全部提交。但是这样的话,没有有效地利用内存,和使用一般的C++动态分配内存函数一样了。 ·       更改保护属性更改已经提交的页

11、面的保护属性,有时候会很有用处,假设你在访问数据后,不想别的函数再访问,或者出于防止指针乱指改变结构的目的,你可以更改数据所处的页面的属性,让别人无法访问。VirtualProtect(PVOID基地址,SIZE_T大小,DWORD新属性,DWORD旧属性)“基地址”是你想改变的页面的地址,注意,不能跨区改变。C++程序:更改一页

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

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

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