OfferVirtualMemory 函数 (memoryapi.h)

指示应用程序不再需要一系列内存页中包含的数据,系统可在必要时将其丢弃。

指定的页面将标记为不可访问,从进程工作集中删除,并且不会写入分页文件。

若要稍后回收提供的页面,请调用 ReclaimVirtualMemory

语法

DWORD OfferVirtualMemory(
  [in] PVOID          VirtualAddress,
  [in] SIZE_T         Size,
  [in] OFFER_PRIORITY Priority
);

参数

[in] VirtualAddress

要提供的内存的页对齐起始地址。

[in] Size

要提供的内存区域的大小(以字节为单位)。 Size 必须是系统页面大小的整数倍数。

[in] Priority

优先级 指示提供的内存对应用程序的重要性。 较高的优先级会增加在调用 ReclaimVirtualMemory 时可以完整回收提供的内存的概率。 系统通常先放弃优先级较低的内存,然后再放弃高优先级内存。 Priority 必须是以下值之一。

含义
VMOfferPriorityVeryLow
0x00000001
提供的内存的优先级非常低,应是第一个丢弃的内存。
VMOfferPriorityLow
0x00000002
提供的内存优先级较低。
VMOfferPriorityBelowNormal
0x00000003
提供的内存低于正常优先级。
VMOfferPriorityNormal
0x00000004
提供的内存对应用程序具有正常优先级,应为最后一个丢弃的内存。

返回值

如果成功,ERROR_SUCCESS;否则 为系统错误代码

注解

若要回收提供的页面,请调用 ReclaimVirtualMemory。 回收页中的数据可能已被丢弃,在这种情况下,内存区域的内容未定义,必须由应用程序重写。

请勿调用 OfferVirtualMemory 来提供锁定的虚拟内存。 这样做将解锁指定的页面范围。

请注意,提供和回收虚拟内存类似于使用MEM_RESET和MEM_RESET_UNDO内存分配标志,不同之处在于 OfferVirtualMemory 从进程工作集中删除内存,并限制对所提供的页面的访问,直到回收它们。

要求

要求
最低受支持的客户端 Windows 8.1 更新 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 R2 更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 memoryapi.h (包括 Windows.h、Memoryapi.h)
Library onecore.lib
DLL Kernel32.dll

另请参阅

DiscardVirtualMemory

内存管理函数

ReclaimVirtualMemory

虚拟内存函数

VirtualAlloc

VirtualFree

VirtualLock

VirtualQuery