【问题标题】:How can I calculate the free address space on Windows?如何计算 Windows 上的可用地址空间?
【发布时间】:2009-07-13 14:11:13
【问题描述】:

如何计算我的进程在 Windows 上的可用虚拟地址空间量?

我的应用程序需要限制使用的地址空间量。所以我需要估计我消耗了多少内存,还剩下多少虚拟内存。如果我只剩下几百兆的地址空间,我的进程开始使用自定义分页系统来避免在内存中加载大量数据。

更重要的是:这个需要按进程计算,因为我只关心我的进程,我还在用Win32。

我尝试过 VirtualQuery(),但它没有返回剩余的总地址空间。

谢谢。

【问题讨论】:

    标签: c++ winapi memory


    【解决方案1】:

    可能需要查看GetProcessMemoryInfoGetProcessWorkingSetSizeEx 以确定您正在使用多少内存。

    【讨论】:

      【解决方案2】:

      使用 Win32 API 中的 GlobalMemoryStatusEx 函数。您感兴趣的字段是 ullAvailVirtual,它是您的进程尚未保留或提交的虚拟空间的字节数。

      【讨论】:

        【解决方案3】:

        如果您使用的是 c++,则可以使用自定义内存分配器。但可能您不需要跟踪每个内存分配,只有程序中大多数内存密集型部分需要。

        一种选择是在启动时分配内存块并使用 LRU 缓存来重用分配的内存块并仅在内存中保留最近使用的数据。您的程序也会更快(在运行时不需要分配),并且您将防止由于分配/释放内存而导致的内存碎片。

        【讨论】:

          猜你喜欢
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 2011-03-13
          • 2020-02-19
          • 2014-02-18
          • 2015-07-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多