原文链接 -> 传送门
函数功能:
VirtualFreeEx 函数用于释放、回收,或者释放回收指定进程的虚拟地址空间页区域。
API 函数原型:
注释:_In_ 说明该参数是输入的。
BOOL WINAPI VirtualFreeEx( _In_ HANDLE hProcess, _In_ LPVOID lpAddress, _In_ SIZE_T dwSize, _In_ DWORD dwFreeType );
参数解析:
|
参数 |
含义 |
||||||
|
hProcess |
1. 指向进程句柄,VirtualFreeEx 函数释放该进程的虚拟地址空间内存 |
||||||
|
lpAddress |
1. 指向要释放页的区域的首地址指针 |
||||||
|
dwSize |
1. 指定要被释放内存区域的大小,字节为单位 |
||||||
|
dwFreeType |
释放操作类型。该参数取下列值:
|
返回值:
1. 如果函数调用成功,返回一个非 0 值;
2. 如果函数调用失败,返回 0。
若想获得更多的错误信息,请调用 GetLastError 函数。
备注:
1. 在进程虚拟地址空间内存的每个页面都有页面状态。VirtualFreeEx 函数能回收在已提交或者未提交页面区域。这意味着您可以回收该页面区域无需事先检测当前的每页的提交状态。回收的页面释放它在内存或者在磁盘分页文件上的物理储存。
2. 如果一个页面被回收但是没有释放,它的状态变为申请保留。随后,您可以调用 VirtualAllocEx 函数去提交它,或者 VirtualFreeEx 函数去释放它。尝试读写一个申请保留的页面会发生访问破坏异常。
3. VirtualFreeEx 函数能释放在已提交或者未提交页面区域。这意味着您可以释放该页面区域无需事先检测当前的每页的提交状态。原本被 VirtualAllocEx 函数申请保留整个页面区域必须同时释放。
4. 如果一个页面被释放,它的状态变为空闲,之后可以被分配。在内存被释放或者回收之后,您不能再一次引用它。在那块内存的信息永远消失了。尝试读写一个空闲的页面会发生访问破坏异常。如果您需要保存信息,不要回收或者释放该内存。
5. 对扩展地址窗口的内存可以调用 VirtualFreeEx 函数进行操作。当释放地址空间时,该区域的物理页映射变无效。但是,该物理页没有被删除,应用程序可以使用。应用程序必须明确地调用 FreeUserPhysicalPages 函数释放这些物理页。当进程被终止,所有的资源自动被清除。
6. 当您使用前后都被分配的区域结束,指定下列值删除它:
· lpAddress 为前后都被分配的区域结束的首地址。
· dwSize 为 0。
· dwFreeType 为 MEM_RELEASE 。MEM_DECOMMIT 参数值不适用于前后都被分配的区域。
需求:
|
Minimum supported client |
Windows xp [仅桌面应用程序] |
|
Minimum supported server |
Windows 2003 服务器版 [仅桌面应用程序] |
|
Header |
WinBase.h (包含于 Windows.h) |
|
Library |
Kernel32.lib |
|
DLL |
Kernel32.dll |




