gpt4 book ai didi

c++ - 确保内存映射页在内存中

转载 作者:行者123 更新时间:2023-12-02 09:53:25 25 4
gpt4 key购买 nike

我有一个只读的 Win32 内存映射文件,没有打开共享。有什么方法可以告诉 Windows 将某些页面加载到内存中,确保它已成功加载,并将其保存在内存中直到我释放它?

我想要这个的原因是因为从内存映射内存读取可能会引发异常,以防由于磁盘/网络故障而无法加载页面。在代码中到处处理这种情况是不切实际的,所以我想确保至少有一些 block 可以安全读取,然后逐 block 读取。

我知道PrefetchVirtualMemory但这严格来说是性能优化;它不能保证当我阅读它们时页面将成功加载或仍在内存中。

附言我不一定要阻止分页,分页很好。我主要关心的是网络驱动器。所以VirtualLock似乎不是正确的事情。

最佳答案

如果您只需要保证不会有网络访问,您可以使用 ReadFile 将所需区域读取到私有(private)内存中。 (可以异步完成)。

另一种(hacky)方法是使用写时复制(FILE_MAP_COPY)映射并导致虚假页面修改。这允许您拥有可能更易于导航的连续内存映射,但某些页面保存在私有(private)内存中。这具有导致内存压力增加的缺点,因为操作系统会为整个映射保留内存。

关于c++ - 确保内存映射页在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62390786/

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