【问题标题】:How to load (or map) file part maximum size, but fit in RAM on Windows?如何加载(或映射)文件部分的最大大小,但适合 Windows 上的 RAM?
【发布时间】:2020-10-30 15:38:00
【问题描述】:

有大文件。我需要快速排序。我将按部分处理适合 RAM 的文件,以避免/度使用页面文件(下一步:合并部分)。如何使用最大内存?

我的解决方案:使用WinApi文件内存映射,但不知道如何获取文件最大大小的一部分,但适合RAM(如何确定大小)?

【问题讨论】:

  • 真的做不到。在您从操作系统获得最大可用 RAM 的时间和您可以申请它的时间之间,可能会出现一些其他进程并占用一些内存。即使在您获得最大 RAM 之后,也会出现一些其他进程并将您的一些内存分页。
  • 为什么不直接使用不超过系统页面大小的文件映射视图呢?或者至少是系统页面大小的倍数?您可以从GetSystemInfo() 获取页面大小,然后将文件大小除以页面大小以确定所需的总页数,然后对其进行限制。您不需要最大化 RAM,也不应该尝试这样做。
  • 你问了同样的问题five days ago

标签: c++ winapi optimization memory file-mapping


【解决方案1】:

您可以VirtualLock 要处理的页面。它将其他大小的物理内存锁定为您需要的大小(如果有的话),将其他内存交换到页面文件。

您可以使用GlobalMemoryStatusEx 函数来确定您的应用程序可以分配多少内存,而不会严重影响其他应用程序。

这样您就可以映射文件并锁定您要处理的页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2022-01-08
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2014-09-05
    相关资源
    最近更新 更多