windows内存管理和API函数

来源:互联网 发布:净化网络环境从我做起 编辑:程序博客网 时间:2024/05/16 01:21

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          判断调用进程是否拥有对指定地址段内存的写操作权限

HeapCreate:
The HeapCreate function creates a heap object that can be used by the calling process. The function reserves space in the virtual address space of the process and allocates physical storage for a specified initial portion of this block.

GlobalAlloc:
The GlobalAlloc function allocates the specified number of bytes from the heap. Win32 memory management does not provide a separate local heap and global heap.
This function is provided only for compatibility with 16-bit versions of Windows.

VirtualAlloc:
The VirtualAlloc function reserves or commits a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero, unless the MEM_RESET flag is set.     
    
所以说,HeapCreate和GlobalAlloc无本质的区别,只是GlobalAlloc是为了兼容16位程序而存在的。
而VirtualAlloc是比较底层的内存操作了,请注意函数返回的是LPVOID,从某种意义上来说,使用Virtual系列的函数,您可以实现进程自己的内存管理模式了。

原创粉丝点击