как убедиться, что вся память malloc’d была освобождена?

#c #malloc #heap-memory

#c #malloc #куча-память

Вопрос:

Мне было интересно, есть ли способ узнать размер используемой в настоящее время памяти malloc’d, чтобы я мог сравнить до и после выполнения тестов, чтобы убедиться, что вся память освобождена. Что-то вроде этого:

 size_t nmembytes_before = malloc_bytes_allocated();
... do your tests ...
size_t nmembytes_after = malloc_bytes_allocated();
if (nmembytes_before != nmembytes_after)
{
    ... error reporting ...
}
 

Существует ли такая вещь, или мы вынуждены использовать valgrind для всего нашего профилирования памяти?

Комментарии:

1. Вы можете легко написать свою собственную простую оболочку для malloc , и free это сделает учет.

2. Это хорошая идея. Было бы легко добавить к подсчету при вызове my_malloc , но было бы сложно вычесть из подсчета при вызове my_free (поскольку размер объекта нелегко определить по указателю)

3. gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html

4. Вы также можете рассмотреть возможность запуска своих тестов с valgrind

Ответ №1:

Многие кучи позволяют получать статистику о выделениях. Glibc предлагает: https://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html#Statistics-of-Malloc

Это должно позволить вам проверить, были ли освобождены все выделенные байты

Комментарии:

1. К сожалению, похоже, что ни одна информация в этих статистических данных не возвращает фактическое количество зарезервированных байтов. Я провел тест, который был в основном бесплатным (malloc (1024)), а «до» и «после» сильно отличались. Однако здесь есть некоторая полезная информация.

2. Uordblks должно быть тем, что вам нужно.