VirtualFree

【勇芳软件工作室】汉化HomePreviousNext

VirtualFree功能在调用进程的虚拟地址空间中释放或分解(或两者)一个页面的区域。

BOOL VirtualFree(

LPVOID 【lpAddress】,//提交的页面的地址
DWORD 【的dwSize】,//区域大小
DWORD 【dwFreeType】//自由操作的类型
); 

参数

【lpAddress】

指向要释放的页面的基地址。如果【dwFreeType】参数包含MEM_RELEASE标志,则当该页面被保留时,此参数必须是VirtualAlloc函数返回的基址。

【的dwSize】

指定要释放的区域的大小(以字节为单位)。如果【dwFreeType】参数包含MEM_RELEASE标志,则此参数必须为零。否则,受影响页面的区域包括从【lpAddress】参数到(【lpAddress】 + 【的dwSize】)范围内的一个或多个字节的所有页面。这意味着跨越页面边界的2字节范围会导致两个页面被释放。

【dwFreeType】

指定空闲操作的类型。可以指定以下标志中的一个但不能同时两个:

含义
MEM_DECOMMIT取消提交的页面的指定区域。
 尝试解除未提交的页面不会导致该函数失败。这意味着一系列已提交或未提交的页面可以被分解而无需担心失败。
MEM_RELEASE释放指定的保留页面区域。如果指定了此标志,则【的dwSize】参数必须为零,否则该函数将失败。

返回值

如果函数成功,返回值不为零。

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

备注

VirtualFree可以执行以下操作之一:

*取消已提交或未提交的页面的区域。

*释放保留页面的区域。

*撤销并释放已提交或未提交的页面的区域。

要释放页面区域,整个页面范围必须处于相同的状态(全部保留或全部提交),并且必须同时释放原来由VirtualAlloc功能保留的整个区域。如果只保留原始保留区域中的部分页面,则必须首先调用VirtualFree以解除提交的页面,然后再次调用VirtualFree以释放整个块。

已发布的页面可用于后续分配操作。尝试读取或写入免费页面会导致访问冲突异常。

VirtualFree可以解除未提交的页面;这意味着可以分解一系列已提交或未提交的页面,而无需担心失败。取消页面会在内存中或磁盘上的页面文件中释放物理存储。如果某个页面被解除但未被释放,则其状态将更改为保留状态,并且可以通过后续调用VirtualAlloc再次提交该页面。尝试从保留页面读取或写入会导致访问冲突异常。

整个页面范围的当前状态必须与【dwFreeType】参数指定的空闲操作类型兼容。否则,该函数失败,没有页面被释放或分解。

也可以看看

GlobalAlloc, GlobalFree, VirtualAlloc