#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 должно быть тем, что вам нужно.