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



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

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

在 linux 或 windows 上的用户空间代码中是否可行(应用程序是 crossp-latform)?目前,我只使用最近接触的内存地址的LRU缓存,希望操作系统不会交换最近使用的内存页。

in Win32 API

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

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

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

另外,我建议您查看numa Win32内存函数以及英特尔缓存行和L2内存操作码,这是一个非常棘手的事情,但它可能会大大增加内存读取/写入的性能(如果这是主要目标)。

相关内容

最新更新