windows 内存管理api学习笔记

为什么使用虚拟内存

虚拟内存最适合用来管理大型对象或数据结构。

比如说,电子表格程序,有很多单元格,但是也许大多数的单元格是没有数据的,用不着分配空间。也许,你会想到用动态链表,但是访问又没有数组快。定义二维数组,就会浪费很多空间。

它的优点是同时具有数组的快速和链表的小空间的优点。


分配虚拟内存

如果你程序需要大块内存,你可以先保留内存,需要的时候再提交物理存储器。在需要的时候再提交才能有效的利用内存。一般来说,如果需要内存大于1M,用虚拟内存比较好。


Windows内存管理API

VirtualAlloc

在调用进程的虚拟地址空间中保留、提交或更改页面区域的状态。此函数分配的内存会自动初始化为零。
参数

[in, optional] LPVOID lpAddress,        //开始地址
[in]           SIZE_T dwSize,           //大小
[in]           DWORD  flAllocationType, //类型
[in]           DWORD  flProtect         //保护属性
  • lpAddress:要分配的区域的起始地址。
    一般情况下,你不需要指定“开始地址”,因为你不知道进程的那段空间是不是已经被占用了;所以你可以用NULL。
  • dwSize:区域的大小,以字节为单位。
  • flAllocationType:
    “类型”有
    MEM_RESERVE(保留)保留区域不占用任何物理存储。
    MEM_RELEASE(释放)
    MEM_COMMIT(提交)为指定的保留内存页面分配内存费用
    如果你要保留的是长久不会释放的内存区,就保留在较高的空间区域,这样不会产生碎片。用这个类型标志可以达到:
    MEM_RESERVE|MEM_TOP_DOWN。
  • flProtect:要分配的页面区域的内存保护。

返回值
如果函数成功,则返回值是页面分配区域的基地址。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError。

VirtualProtect

更改对调用进程虚拟地址空间中已提交页面区域的保护。
参数

[in]  LPVOID lpAddress,
[in]  SIZE_T dwSize,
[in]  DWORD  flNewProtect, 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值