在Win32中管理虚拟内存

在Win32中的虚拟内存管理为每个进程提供2 GB的虚拟内存,物理内存不够的时候会使用虚拟内存文件。

 

内存地址的状态

1)保留的地址:只记录要使用内存的范围(防止分配重复),无物理内存页被提交。
例:lpBase = VirtualAlloc (NULL, 10485760, MEM_RESERVE, PAGE_NOACCESS);    /* 保留 10 MB 的地址空间 */   


2)提交的地址:可使用以保留的地址,物理内存或磁盘上的页文件被分配。
例:lpPage3 = VirtualAlloc (lpBase + (2 * 4096),4096,MEM_COMMIT,PAGE_READWRITE);/* 为第3页地址提交内存。 */


3)释放地址:一旦地址被以保留的或者已提交的形式分配,VirtualFree是唯一可以释放它们的方法。
VirtualFree (lpBase + (2 * 4096),4096,MEM_DECOMMIT,PAGE_NOACCESS); /* 对第3页地址解除提交内存。 */

 

4)改变虚拟内存页的保护
一个应用程序可以按PAGE_READWRITE来提交一个页的地址,并且立即将数据填写到该页中。然后,该页的保护将被改变为PAGE_READONLY,
这样可以有效地保护数据不被该进程中的任何线程重写。使用下列函数,可以使一个不能被访问的页可用。
VirtualProtect (lpStack + 4096,4096,PAGE_READWRITE,lpdwOldProt);   /*将页保护改变成可读/写。*/

 

5)查询一个进程的虚拟内存的状态:查询内存提交,保留,保护,或未使用
VirtualQueryEx (hChildProcess,lpMem,lpList,sizeof (MEMORY_BASIC_INFORMATION));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值