Windows内存管理的API函数

 

数据所在的内存地址,内存最小存储单元是字节,在32位系统上使用32位数来表示内存地址.
一共可以表示2^32次

地址空间:
32位可以使用4GB内存,那么地址空间就是0x00000000~0xFFFFFFFF

物理内存:
硬件系统中真实存在的存储空间称为物理内存.

虚拟地址空间:

windows内存管理知识:
1.分段或分页内存管理
2.物理地址和虚拟地址,虚拟地址空间.
3.虚拟内存布局,内存分工,堆,栈.
4.内存存取权限.
5.标准C内存管理函数与windows内存管理API的关系.

 

内存保护属性和存取权限
属性常量 意义

PAGE_EXECUTE 可执行
PAGE_EXECUTE_READ 可读,可执行
PAGE_EXECUTE_READWRITE 可读,可写,可执行
PAGE_EXECUTE_WRITECOPY 可读,可写,可执行,以Read-on-write和copy-on-write方式共享
PAGE_NOACCESS 不可访问
PAGE_READONLY 只读
PAGE_READWRITE 可读,可写
PAGE_WRITECOPY copy-on-write保护机制
PAGE_GUARD 保护,如果访问则异常(不能单独使用)
PAGE_NOCACHE 不进行CPU缓存(不能单独使用)
PAGE_WRITECOMBINE write-combined优化(不能单独使用)

 

堆管理API
HeapCreate 为进程创建一个堆,返回一个堆句柄
GetProcessHeap 获取当前进程中的一个堆
HeapAlloc 从指定堆上分配内存块
HeapReAlloc 重新分配内存,改变已经分配好的堆内存块大小
GetSystemInfo 获取系统信息
HeapSize 获取指定堆大小,以字节为单位返回堆大小信息
HeapFree 释放HeapAlloc和HeapReAlloc所分配的内存
HeapDestroy 销毁由HeapCreate创建的堆

 

全局和局部内存管理API函数
GlobalAlloc 在默认堆上分配指定属性的大小的内存
GlobalFree 释放由GlobalAlloc分配的内存
GlobalReAlloc 重新分配内存,改变已经分配好的内存块大小
GlobalLock 将GlobalAlloc及GlobalReAlloc分配属性为GMEM_MOVEABLE内存块设为固定
GlobalHandle 与GlobalLock相对
GlobalSize 获取内存大小

 

虚拟内存管理API函数
VirtualAlloc "保留"或"提交"内存页面,将"空闲的"内存页面变为"保留的"或"已经提交的",保留的改为已提交的
VirtualAllocEx 类似VirtualAlloc功能,不过可以为其他进程分配内存
VirtualFree 将内存状态从"已经提交的"变为"保留的"
VirtualFreeEx 释放VirtualAllocEx分配的内存,功能,使用方法和VirtualFree类似
VirtualProtect 改变指定虚拟内存分页的保护属性

 

内存操作与内存信息管理API函数
CopyMemory 复制内存,第一个参数为目的地址,第二个参数为源地址,第三个参数为复制数据大小
FillMemory 填充内存,将一段内存填充为同一个值
MoveMemory 功能和CopyMemory类似,不同的是源地址和目的地址可以相同
ZeroMemory 将指定内存区域清零
GlobalMemoryStatusEx 用于获取系统当前内存使用情况
IsBadCodePtr 判断调用进程是否拥有对指定地址内存的读操作权限
IsBadReadPtr 判断调用进程是否有对指定地址段内存的读操作权限
ISBadStringPtr 判断调用进程是否拥有对字符串指针的读取权限
IsBadWritePtr 判断调用进程是否拥有对指定地址段内存的写操作权限

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows API 中有关内存映射文件的函数接口主要包括以下几个: 1. `CreateFileMapping`:创建一个内存映射文件对象,返回一个内存映射文件的句柄。函数原型如下: ``` HANDLE CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName ); ``` 其中,`hFile`是文件句柄,`lpAttributes`是安全属性的指针,`flProtect`是内存保护属性,`dwMaximumSizeHigh`和`dwMaximumSizeLow`是内存映射文件的大小,`lpName`是映射文件的名称。 2. `MapViewOfFile`:将一个内存映射文件对象映射到当前进程的地址空间,返回映射视图的起始地址。函数原型如下: ``` LPVOID MapViewOfFile( HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap ); ``` 其中,`hFileMappingObject`是内存映射文件的句柄,`dwDesiredAccess`是映射视图的访问权限,`dwFileOffsetHigh`和`dwFileOffsetLow`是文件偏移量,`dwNumberOfBytesToMap`是映射的字节数。 3. `FlushViewOfFile`:将内存映射文件的指定区域刷新到磁盘上的文件中。函数原型如下: ``` BOOL FlushViewOfFile( LPCVOID lpBaseAddress, SIZE_T dwNumberOfBytesToFlush ); ``` 其中,`lpBaseAddress`是映射视图的起始地址,`dwNumberOfBytesToFlush`是要刷新的字节数。 4. `UnmapViewOfFile`:解除一个内存映射文件视图,并释放相应的资源。函数原型如下: ``` BOOL UnmapViewOfFile( LPCVOID lpBaseAddress ); ``` 其中,`lpBaseAddress`是映射视图的起始地址。 通过这些函数接口,我们可以实现Windows平台下内存映射文件的读操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值