数据所在的内存地址,内存最小存储单元是字节,在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 判断调用进程是否拥有对指定地址段内存的写操作权限