如何计算Windows上的空闲地址空间?

时间:2009-07-13 14:11:13

标签: c++ winapi memory

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

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

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

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

谢谢。

3 个答案:

答案 0 :(得分:1)

可能希望查看GetProcessMemoryInfoGetProcessWorkingSetSizeEx以确定您使用的内存量。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

一个选项是在启动时分配内存块,并使用LRU缓存重用已分配的内存块,并仅将最近使用的数据保留在内存中。您的程序也会更快(在运行时不需要分配),您将防止因分配/释放内存而造成的内存碎片。