Windows核心编程:在应用程序中使用虚拟内存

本文详细介绍了Windows核心编程中的虚拟内存管理,包括如何预订地址空间区域、调拨物理存储器、改变保护属性以及地址窗口扩展等功能,强调了在不同场景下选择合适内存管理策略的重要性。
摘要由CSDN通过智能技术生成
Windows核心编程:在应用程序中使用虚拟内存
    Microsoft Windows提供以下三种机制来对内存进行操控:
  • 虚拟内存 :最适合用来管理大型对象数组或大型结构数组。
  • 内存映射文件 :最适合用来管理大型数据流(通常是文件),以及在同一机器上运行的多个进程之间共享数据。
  • :最适合用来管理大量的小型对象。   

   以下将讨论第一种方式,即虚拟内存。
1.预定地址空间区域
    我们可以调用VirtualAlloc函数来预订进程中的地址空间区域:
    PVOID VirtualAlloc(
        PVOID pvAddress,
        SIZE_T dwSize,
        DWORD fdwAllocationType,
        DWORD fdwProtect);

    第一个参数 pvAddress 是内存地址,用来告诉系统我们想要预定地址空间中的哪一块。由于系统会记录所有闲置的地址区间,因此大多数时候我们只要给该参数传NULL就可以了。这等于是告诉系统自动找一块闲置区域。记住:这里的内存地址指的是进程的地址空间中的用户模式地址空间。
    第二个参数 dwSize 用来指定我们想要预定的区域大小,以字节为单位。系统始终都根据CPU页面大小的整数倍来预订区域,如我们预定5KB的空间,那么最终得到的会是8KB(两个页面2*4KB)。
     第三个参数
fdwAllocationType ,用来告诉系统是要预定区域还是要调拨物理存储器(因为调拨物理存储器也是用的VirtualAlloc函数,MEM_RESERVE:预定地址空间区域,MEM_COMMIT:调拨物理存储器,MEM_TOP_DOWN:指定从尽可能高的内存地址来预订区域)。
    第四个参数 fdwProtect 是给区域指定的保护属性。区域的保护属性对调拨给该区域的物理存储器不起任何作用。无论为区域指定什么保护属性,只要还没有给它调拨物理存储器,试图访问区域内的任何内存地址都会引发访问违规。
     当区域的保护属性和将要调拨的物理存储器的保护属性相一致时,系统内部的处理效率会更高。

表1:内存页面保护属性
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值