【问题标题】:Remaining heap size剩余堆大小
【发布时间】:2009-09-17 10:54:50
【问题描述】:

我知道这可能过于简单了 - 但我需要知道我可以在我的程序中分配的空闲内存量。 这是一个 Windows 移动项目 (c++),似乎我可能在某处隐藏了内存泄漏。调用返回我可以访问的堆存储的剩余大小(或剩余块)的函数将是完美的。 有什么方法可以遍历 operator new 使用的可用内存块吗?或者是内置的 WINAPI(或 winmobile)函数呢?

【问题讨论】:

    标签: c++ heap-memory


    【解决方案1】:

    查看GlobalMemoryStatus。它将提供可用物理内存的数量。请注意,较旧的 Windows CE 强制每个进程限制 32MB(Windows CE 6.0 取消了此限制)。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 现在试试,谢谢建议。问题是我的程序在分配了一定数量的内存后崩溃了,所以我想从 VS 以调试模式运行,并在崩溃之前检查堆大小。另外,由于某种原因,“杀死应用程序”按钮无效,崩溃后我没有得到任何统计数据
      【解决方案3】:

      看看堆状态报告函数:

      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

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多