Есть ли функция libc (или эквивалентная), чтобы узнать текущий размер кучи? - PullRequest
1 голос
/ 06 октября 2010

Есть ли функция libc (или эквивалентная), чтобы узнать текущий размер кучи?

У меня проблема с памятью в моем приложении, и кажется, что я могу контролировать кучу, когда я хочуПомоги мне найти проблему.Так есть ли способ узнать текущий размер кучи?

Ответы [ 4 ]

4 голосов
/ 06 октября 2010

Нет.

Поскольку необходимая функциональность предназначена для отладки, для вас будет гораздо разумнее использовать отладчик или учет ресурсов операционной системы для мониторинга использования памяти процессом, а не пытатьсязапишите это в вашу программу.

Если вы действительно хотите, чтобы ваша программа отслеживала использование своей памяти, единственный переносимый способ сделать это - избегать использования malloc и * 1008.* напрямую и вместо этого вызывайте их через оболочки, которые увеличивают / уменьшают счетчик.Это не будет учитывать фрагментацию памяти, но если вы заинтересованы в использовании логической памяти вашей программы, а не в воздействии на физические ресурсы, то счетчик, реализованный таким образом, может на самом деле более информативен , чем анализ рабочейучет ресурсов системы.

Если вы заботитесь только о конкретной целевой платформе или семействе платформ, могут существовать и функции, выходящие за рамки стандарта C, которые делают то, что вы хотите.В POSIX, поиск getrusage.

2 голосов
/ 06 октября 2010

Что вам нужно, это http://valgrind.org/

0 голосов
/ 06 октября 2010

Вы можете использовать такие инструменты, как Purify, для устранения проблем с памятью. Эта статья от IBM содержит много подробностей об источниках таких проблем и указателях решений.

0 голосов
/ 06 октября 2010

Все равно не поможет. Хотите знать:
Общее адресное пространство.
Пространство, доступное для пользовательских программ
Пространство, нераспределенное для этого процесса, включая обмен или нет
Самый большой бесплатный доступный чанк

и т.д.

...