windows - 如何获得预读字节?

标签 windows linux operating-system virtual-memory pagefile

操作系统从磁盘读取的内容多于程序实际请求的内容,因为程序将来可能需要附近的信息。在我的应用程序中,当我从磁盘中获取一个项目时,我想显示该元素周围的信息间隔。我请求和显示的信息量与速度之间存在权衡。但是,由于操作系统已经读取了比我请求的更多的内容,因此访问这些已经在内存中的字节是免费的。我可以使用什么 API 来找出操作系统缓存中的内容?

或者,我可以使用内存映射文件。在那种情况下,问题就简化为查明页面是否交换到磁盘。这可以在任何常见的操作系统中完成吗?

编辑:相关论文 http://www.azulsystems.com/events/mspc_2008/2008_MSPC.pdf

最佳答案

您确实可以使用第二种方法,至少在 Linux 上是这样。 mmap() 文件,然后使用 mincore() 函数确定驻留哪些页面。从手册页:

int mincore(void *addr, size_t length, unsigned char *vec);

mincore() returns a vector that indicates whether pages of the calling process's virtual memory are resident in core (RAM), and so will not cause a disk access (page fault) if referenced. The kernel returns residency information about the pages starting at the address addr, and continuing for length bytes.

这里当然存在竞争条件 - mincore() 可以告诉您页面是驻留的,但它可能会在您访问它之前被换出。 C'est la vie

关于windows - 如何获得预读字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732484/

相关文章:

windows - 在 Windows 下以访客身份或以有限权限运行应用程序而无需重新登录?

windows - 找不到用于 apache/windows 的 mod_wsgi

linux - Windows 等效查找 - 删除

c - 通过管道系统调用生成斐波那契数列的程序

windows - Windows 窗体中的 ComboBox Datagridview 控件

c++ - 有什么方法可以确定 Windows 中可移动驱动器的速度?

python - 将标准输出从 subprocess.Popen 保存到文件,并将更多内容写入文件

c - 消息队列 - 没有正确的响应

检查文件是否是c文件并编译它

linux - WEXITSTATUS 命令