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