gpt4 book ai didi

c - 强制加载 mmap 页面

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:58 25 4
gpt4 key购买 nike

我已经使用 mmap 将一个文件映射到内存中。现在我想确保访问此内存时不会出现页面错误,即我想强制系统实际从硬盘读取数据并将其存储在 RAM 中。我相信一旦数据在那里,我就可以防止与 mlockall 交换。但是让系统加载数据的正确方法是什么?

我显然可以只对所有页面进行虚拟读取,但这似乎是一个丑陋的 hack。此外,我不想担心编译器过于智能并优化了虚拟读取。

有什么建议吗?

最佳答案

为什么您认为 mlock()mlockall() 不起作用?保证受影响的页面在 RAM 中正是它的目的。引用联机帮助页:

All pages that contain a part of the specified address range are guaranteed to be resident in RAM when the call returns successfully; the pages are guaranteed to stay in RAM until later unlocked.

您可以使用其他方法,例如 madvise()请求将页面加载到 RAM 中,但不能保证内核会符合该要求,也不能保证即使内核确实将它们带入,它们也会留在 RAM 中。我相信 mmap(MAP_POPULATE) 也不能保证页面会留在 RAM 中。

关于c - 强制加载 mmap 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com