2012-02-11 6 views
1

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

+0

http://stackoverflow.com/questions/232691/how-can-i-get-the-size-of-an-array-from-a-pointer-in-c HTTP: // StackOverflow .com/вопросы/1208644/как-могу-я-получить на величину в своем-памяти-блок-выделяемой-используя-таНос – cnicutar

ответ

1

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

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

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

0

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

3

В стандарте, нейтральной операционной системе, нет способа.

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

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

Конечно, детали являются специфичными для системы.

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

0

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

0

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

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

Крючков для таНоса

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

Heap Непротиворечивость

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

Статистика для распределения памяти с таНосом

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