Получить объем памяти, выделенный malloc - PullRequest
2 голосов
/ 11 февраля 2012

Есть ли простой способ узнать общий объем памяти, выделенный каждым malloc в программе?Я страдаю от утечки памяти и хочу выяснить, где она находится.

Ответы [ 5 ]

3 голосов
/ 11 февраля 2012

В стандартном, не зависящем от операционной системы стиле нет способа.

Но с GNU Glibc у вас есть mallinfo

В системах Linux вы можете узнать оваша карта виртуальной памяти через псевдо-файл /proc/self/maps (или /proc/self/smaps, который дает более подробную информацию).Для процесса pid 123 вы можете прочитать /proc/123/maps

Конечно, детали зависят от системы.

Чтобы найти утечку памяти, используйте такой инструмент, как valgrind

1 голос
/ 11 февраля 2012

По определенным malloc, да, у вас столько памяти, сколько вы просили, и не более: -)

На самом деле, это может дать вам немного больше (многие реализации дадут вам кратное 16 или 32 байта), но в стандартном C нет способа определить, сколько. Использование большего, чем вы просили, является неопределенным поведением, независимо от того, какой тип заполнения выполняется.

В некоторых системах есть функция mallinfo, которую можно вызывать для получения статистики по общей области памяти, если вы хотите узнать, сколько памяти было выделено. Вы можете посмотреть на это, но, опять же, это не стандарт.

0 голосов
/ 11 февраля 2012

Используйте valgrind, чтобы помочь в отладке потенциальной утечки памяти.

Если вы хотите выполнить некоторую отладку C, glibc имеет некоторые функции, которые помогут вам в отладке с помощью malloc.

Крючки для malloc

http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html

Проверка целостности кучи

http://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html

Статистика выделения памяти с помощью malloc

http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html

0 голосов
/ 11 февраля 2012

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

0 голосов
/ 11 февраля 2012

Нет стандартного способа сделать это. Библиотека C от Microsoft имеет функцию _heapwalk , которую вы можете использовать для ее вычисления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...