malloc_usable_size: аллокатор Rust теперь может узнать реальный размер блока
04.01.2026В relibc реализована функция malloc_usable_size: она возвращает размер блока памяти вместе со служебной информацией аллокатора, а не только запрошенный. Это позволяет точно считать расход памяти и находить утечки.
Почему размера недостаточно
Аллокаторы выдают память блоками и хранят в них служебные данные: размер для освобождения, указатели на следующий и предыдущий блок, флаги занятости. Из-за этого блок всегда больше запрошенного, и разница может быть заметной при большом числе мелких выделений.
Программа знает, сколько запросила, но не знает, сколько заняла в памяти аллокатора. Разница — это и есть накладные расходы, которые невидимы в счётчиках.
malloc_usable_size сообщает размер блока целиком. С ней счётчик памяти становится честным.
Где это нужно на практике
В реализации аллокатора на Rust функция используется напрямую. Реализация GlobalAlloc для Vec и Box может вычитать из общего счётчика именно реальный размер, а не запрошенный. Без неё любой такой счётчик показывал бы заниженное потребление, и на длинных прогонах расхождение становилось бы заметным.
Второе применение — поиск утечек. Инструмент, который умеет спрашивать у аллокатора размер блока по адресу, может отличить «много живых маленьких объектов» от «один утекающий большой».
Третье — проверка, не вышел ли размер за ожидаемый. Грубое, но полезное тестовое утверждение.
Оригинал
Коммит Implement malloc_usable_size от 4 января 2026 года в репозитории redox-os/relibc; svодка «This Month in Redox — January 2026», раздел «Relibc Improvements»
Упоминаний: 1 · Просмотров: 3