以编程方式检查内存页面状态

时间:2013-12-25 14:45:56

标签: linux windows memory paging

我想在大型数组上实现插值搜索。其中一种可能的优化是触摸已经加载到主存储器中的存储器地址(触摸它们不会导致硬页面错误)。例如,如果我需要读取索引X处的数据,我可以检查此页面是否在主内存中,如果不是 - 我可以检查内存中已有的相邻页面之一。

所以,我需要一些机制来检查地址(X & 0xFFFFFFFFFFFE0000)上的页面是否已加载(或不加载)。或者更好 - 我需要在某个地址范围内获取已加载页面的列表,或者类似的东西。

是否可以在linux或windows上使用用户空间代码(app是crossp-latform)?此时我只是使用最近触及的内存地址的LRU缓存,希望操作系统不会交换最近使用过的内存页面。

1 个答案:

答案 0 :(得分:1)

在Win32 Api中

查看QueryWorkingSet函数以查询进程内存的状态。

作为在物理内存上加载页面的有效方法,请参阅PrefetchVirtualMemory

与Windows和Linux兼容的最低级别的跨平台API,我知道是POSIX规范。

另外我建议你看看numa Win32内存函数和intel缓存行和L2内存操作码,这是一个非常棘手的东西,但它可以大大增加内存读/写的性能(如果这是主要目标)。