【问题标题】:What is fadvise/madvise equivalent on windows?Windows 上的 fadvise/madvise 等价物是什么?
【发布时间】:2010-11-15 03:06:05
【问题描述】:

例如,在 UNIX 上,我可以使用 posix_fadvise(POSIX_FADV_WILLNEED) 告诉操作系统将来需要映射。如果感觉如此,它将预读数据。

如何判断对Windows的访问意图?

【问题讨论】:

    标签: winapi unix memory-management portability


    【解决方案1】:

    您可以将FILE_FLAG_RANDOM_ACCESSFILE_FLAG_SEQUENTIAL_SCAN 传递给 CreateFile()

    【讨论】:

    • 这是 Windows 上唯一的提示可能性吗?
    • 就提示而言,我认为是这样。你可以禁用缓存之类的东西,但是其他一些标志有对齐要求,所以它不仅仅是一个简单的提示
    • FILE_ATTRIBUTE_TEMPORARY 看起来也很有用 - 根据msdn.microsoft.com/en-us/library/…,它告诉系统如果有足够的缓存内存可用,则避免将数据写入磁盘。
    【解决方案2】:

    实际上,正如 Anders 所建议的那样,Windows 7 及更早版本的内存管理功能中没有这种方法

    有两种不同的方式来做类似的事情:

    • 使用ReadFileEx 异步读取数据。以后需要时,数据可能仍在文件缓存中。
    • 使用FILE_FLAG_SEQUENTIAL_SCAN 属性CreateFile 的流式提示打开文件。然后可能会自动完成预读。

    【讨论】:

      【解决方案3】:

      从 Windows 8 开始,PrefetchVirtualMemory 函数用于此目的。

      【讨论】:

        猜你喜欢
        • 2020-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-09
        • 2011-12-11
        相关资源
        最近更新 更多