【发布时间】:2011-11-08 08:40:58
【问题描述】:
哪些 win32 API 可用于编写如下所述的工具:
我的目标是一个可用于检查/报告文件的特定部分是否位于/可用内存 (RAM) 或虚拟内存 (磁盘) 的工具?
【问题讨论】:
标签: c++ winapi memory-management in-memory
哪些 win32 API 可用于编写如下所述的工具:
我的目标是一个可用于检查/报告文件的特定部分是否位于/可用内存 (RAM) 或虚拟内存 (磁盘) 的工具?
【问题讨论】:
标签: c++ winapi memory-management in-memory
VirtualQuery QueryWorkingSetEx 这样做,特别是 PSAPI_WORKING_SET_EX_BLOCK 中的 Locked 位。正如我最初错误地指出的那样,VirtualQuery 仅让您判断页面是否已提交等,而不是它们是否实际上在物理 RAM 中。对于 Linux,它将是 mincore,它只返回一个字节向量(LSB == 1 表示内核)。
请注意,您获得的信息是快照,这意味着原则上信息在函数返回时可能已经过时(很像 GetCurrentProcessorNumber)。
因此,请将信息视为(可能或多或少准确,但不可靠)提示,而不是保证。
【讨论】:
MEMORY_BASIC_INFORMATION。这告诉您有关范围的信息,而不是单个页面,当然也不是它们当前是否已换出到磁盘。例如。 MEM_COMMIT: pages for which physical storage has been allocated, either in memory or in the paging file - 所以没有区别。
不存在,原因很简单。答案可能会改变而 API 函数返回。 (此外,答案通常是“是的,是的”。)
【讨论】: