代码之家  ›  专栏  ›  技术社区  ›  Viktor Sehr

远离Windows中的虚拟内存\C++

  •  1
  • Viktor Sehr  · 技术社区  · 16 年前

    我正在编写一个性能关键型应用程序,在将数据转储到光盘之前,必须在物理内存中存储尽可能多的数据。

    我可以用 ::GlobalMemoryStatusEx(...) ::GetProcessMemoryInfo(...) 了解物理内存的保留\空闲百分比以及当前进程处理的内存量。 使用此数据,我可以确保在使用约90%的物理内存或达到每个应用程序最大2GB限制的约90%时转储。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Timo Geusch    16 年前

    其他 程序到磁盘,这可能会影响您的性能。更不用说另一个应用程序可能会启动并消耗您当前占用的内存,从而导致一些应用程序内存被调出。你打算怎么处理?

    有一种方法可以通过 non-paged pool 但是(a)这个池相对较小,(b)它由设备驱动程序使用,可能只能从内核内部使用。除非你想确保你的系统不是那么稳定,否则也不建议使用大块的内存。

        2
  •  6
  •   Andreas Brinck    16 年前

    这个功能怎么样:

    int
    bytesLeftUntilVMUsed() {
        return 0;
    }
    

        3
  •  5
  •   Skizz    16 年前

    想象一下,在256Mb内存(MS建议最小1GB)中运行Windows7。这就是您要求用户重新保存90%可用RAM的有效方法。

    真正的问题是:为什么需要这么多内存?“性能关键”标准究竟是什么?

    通常,此类问题意味着您的设计存在严重错误。

    更新:

        4
  •  1
  •   S.Lott    16 年前

    虚拟内存的“虚拟”部分必须被视为一种硬件功能,只有编写自己的操作系统才能克服它。

        5
  •  0
  •   MSalters    15 年前

    哎哟非分页池(无法交换或分配给进程的RAM量)通常为256 MB。这是2GB机器内存的12.5%。如果将另外90%的物理RAM分配给一个进程,那么剩下-2,5%用于所有其他应用程序、服务、内核和驱动程序。即使你只为你的应用程序分配了85%,也只剩下2,5%=51MB。