Каким образом менеджер памяти CPython (PyMalloc) оптимизирует выделение памяти под мелкие объекты размером до 512 байт? Как устроена иерархия Arena, Pool и Block, и почему память, освобождённая Python, далеко не всегда возвращается операционной системе (malloc vs free)?

PyMalloc группирует небольшие выделения в блоки классов размеров, pools и arenas. Освобождение объекта часто возвращает блок внутреннему аллокатору, а не немедленно ОС.

Короткий ответ

Что ответить на собеседовании

PyMalloc группирует небольшие выделения в блоки классов размеров, pools и arenas. Освобождение объекта часто возвращает блок внутреннему аллокатору, а не немедленно ОС.

Подробный разбор

Ответ с пояснениями

PyMalloc группирует небольшие выделения в блоки классов размеров, pools и arenas. Освобождение объекта часто возвращает блок внутреннему аллокатору, а не немедленно ОС.

Pool обслуживает блоки определённого размера, arena содержит pools. Пока в arena остаются живые объекты, вернуть её целиком сложно; фрагментация удерживает память. PyMalloc традиционно обслуживает запросы до 512 байт, большие идут другим путём. Детали зависят от версии и сборки: например, free-threaded CPython использует другой allocator. free на нижнем уровне также не гарантирует немедленного падения RSS.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее