2011-11-08 16 views

回答

3

VirtualQuery QueryWorkingSetEx这样做,特别是在PSAPI_WORKING_SET_EX_BLOCK的锁定位。我最初错误地指出的VirtualQuery只是让你告诉页面是否被提交,而不是它们实际上是否在物理RAM中。对于Linux,它将是mincore,它只是返回一个字节向量(LSB == 1,用于内核)。

请注意,您获得的信息是快照,这意味着信息原则上可能在函数返回时已经过时(很像GetCurrentProcessorNumber)。
因此,将信息视为(可能或多或少准确但不可靠)暗示,而不是保证。

+0

返回值中的哪一个对应于答案?据我所见,你所得到的只有'MEMORY_BASIC_INFORMATION'。这会告诉你一些关于范围的信息,而不是单个页面,当然不是它们目前是否被换出到磁盘。例如。 MEM_COMMIT:已经分配了物理存储的页面,无论是在内存中还是在分页文件中 - 都没有区别。 – MSalters

+0

你是对的,我弄糊涂的功能(让Linux一个正确,但Windows的错误)。将更新。 – Damon

+0

而这不起作用,因为它只会告诉你哪些页面被锁定在内存中(不可分页)。这相当稳定;正确锁定意味着它们不会随时随地换到磁盘上。但这也是一个罕见的例外; RAM中的大多数页面都不以任何方式被锁定,并且是分页的候选对象。这里没有回答这个问题(另见评论我的答案,这解释了真正的目标) – MSalters

2

不存在,原因很简单。答案可能会改变,而 API函数返回。 (此外,答案往往是“是的,是的”。)

+0

即使通过内核级编程?我想要的只是计算一个零件从内存加载/卸载的时间百分比。 – Aan

+0

为什么不使用Windows的事件跟踪(ETW)?你真的应该问这个问题,而不是现在的问题。 – MSalters

+0

我会看看ETW。谢谢。 – Aan

相关问题