【发布时间】:2009-09-17 10:54:50
【问题描述】:
我知道这可能过于简单了 - 但我需要知道我可以在我的程序中分配的空闲内存量。 这是一个 Windows 移动项目 (c++),似乎我可能在某处隐藏了内存泄漏。调用返回我可以访问的堆存储的剩余大小(或剩余块)的函数将是完美的。 有什么方法可以遍历 operator new 使用的可用内存块吗?或者是内置的 WINAPI(或 winmobile)函数呢?
【问题讨论】:
标签: c++ heap-memory
我知道这可能过于简单了 - 但我需要知道我可以在我的程序中分配的空闲内存量。 这是一个 Windows 移动项目 (c++),似乎我可能在某处隐藏了内存泄漏。调用返回我可以访问的堆存储的剩余大小(或剩余块)的函数将是完美的。 有什么方法可以遍历 operator new 使用的可用内存块吗?或者是内置的 WINAPI(或 winmobile)函数呢?
【问题讨论】:
标签: c++ heap-memory
查看GlobalMemoryStatus。它将提供可用物理内存的数量。请注意,较旧的 Windows CE 强制每个进程限制 32MB(Windows CE 6.0 取消了此限制)。
【讨论】:
【讨论】:
看看堆状态报告函数:
http://msdn.microsoft.com/en-us/library/wc28wkas.aspx
首先,包括crtdbg:
#include <crtdbg.h>
然后在您的代码中:
_CrtMemState ms;
_CrtMemCheckpoint(&ms);
_CrtMemDumpStatistics(&ms);
这将像这样输出到调试输出窗口:
0 bytes in 0 Free Blocks.
56596 bytes in 2056 Normal Blocks.
17895 bytes in 83 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 74491 bytes.
Total allocations: 240054 bytes.
默认的堆预留空间是1MB,这个可以在Project Properties, Configuration Properties, Linker, System, "Heap Reserve Size" (VS 2010)中调整
您可能还想查看 _CrtSetDbgFlag http://msdn.microsoft.com/en-us/library/5at7yxcs(v=VS.100).aspx
【讨论】: