Оставшийся размер кучи - PullRequest
1 голос
/ 17 сентября 2009

Я знаю, что это может быть упрощением, но мне нужно знать объем свободной памяти, который я мог бы выделить в своей программе. Это проект для Windows Mobile (C ++), и кажется, что где-то скрывается утечка памяти. Вызов функции, которая возвращает оставшийся размер (или оставшиеся куски) хранилища кучи, к которому я мог бы обратиться, был бы идеальным. Есть ли какой-нибудь способ перебрать доступные порции памяти, которые использует новый оператор? Или встроенная функция WINAPI (или winmobile), которая это делает?

Ответы [ 3 ]

1 голос
/ 17 сентября 2009

Оформить GlobalMemoryStatus . Это обеспечит объем свободной физической памяти. Обратите внимание, что в более старых версиях Windows CE установлен предел 32 МБ на процесс (Windows CE 6.0 снимает этот предел).

0 голосов
/ 21 мая 2011

Ознакомьтесь с функциями отчетов о состоянии кучи:

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.

По умолчанию зарезервированное пространство кучи составляет 1 МБ, это можно изменить в свойствах проекта, свойствах конфигурации, компоновщике, системе, «резервном размере кучи» (VS 2010)

Вы также можете посмотреть на _CrtSetDbgFlag http://msdn.microsoft.com/en-us/library/5at7yxcs(v=VS.100).aspx

0 голосов
/ 17 сентября 2009
...