Windows核心编程 - 在应用程序中使用虚拟内存(1)

Windows提供了以下三种机制来对内存进行操控:

1)虚拟内存:最适合用来管理大型对象数组或大型数据结构数组;

2)内存映射文件:最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多个进程之间共享数据;

3)堆:最适合用来管理大量的小型对象。

     Windows提供了一些用来操控虚拟内存的函数,通过这些函数可以直接预订地址空间区域、给区域调拔(来自页交换文件的)物理存储器、根据需要设置页面的保护属性。

1. 预订地址空间区域

    函数: PVOID VirtualAlloc(

                 PVOID pvAddress,

                 SIZE_T dwSize,

                 DWORD fdwAllocationType,

                 DWORD fdwProtect);

 第一个参数pvAddress可能指定告诉系统想要预订的地址空间是哪一块,为NULL时表示由系统搜索闲置的地址空间;

第三个参数fdwAllocationType用来表示是预订区域还是调拔物理存储器,如果是预订区域则传MEM_RESERVE;

        如果打算预订一块区域并且长时间使用,那么就从尽可能高的内存地址来预订区域,这样可以防止在进程地址空间中的中间预订区域,从而避免可能引起的内存碎片。调用函数如下:

           VirtualAlloc(NULL, 6*1024, MEM_TOP_DOWN | MEM_RESERVE, PAGE_READWRITE);

2.给区域调拔物理存储器

    为了调拔物理存储器,需再次调用VirtualAlloc(),需指定类型标志MEM_COMMIT和页保护属性PAGE_READWRITE,例如应用程序在地址5242880处预订一块大小为512KB的区域,现在希望给该区域从2KB地址开始的地方调拔6KB的物理存储器,调用函数如下:

      VirtualAlloc((PVOID)(5242880 + (2*1024)), 6*1024, MEM_COMMIT, PAGE_READWRITE);

3.同时预订和调拔物理存储器

   只需调用一次VirtualAlloc(),指定相应参数即可,希望预订一块大小为99KB的区域,并给该区域调拔99KB的物理存储器,调用函数如下:

       VirtualAlloc(NULL, 99 * 1024, MEM_RESERVE | MEM_COMMIT,  PAGE_READWRITE);

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值