[Из песочницы] Python Memory Management: немного о фрагментации памяти

[unable to retrieve full-text content]Некоторые мысли по этой статье.

На днях заинтересовался тем, как работает Python Memory Management в CPython для Python3 для 64-разрядной Ubuntu.

Немного теории


В системной библиотеке glibc есть аллокатор malloc. У каждого процесса есть область памяти, называемая кучей. Выделяя память динамически вызовом функции malloc, мы получаем чанк из кучи этого процесса. Если размер запрашиваемой памяти небольшой (не более 128KB), то память может браться из списков свободных чанок. Если это невозможно, то память выделится системным вызовом mmap (sbrk, brk). Системный вызов mmap отображает виртуальную память на физическую. Память отображается страницами по 4KB. Большие чанки (более 128KB) всегда выделяются через системный вызов mmap. При освобождении памяти, если свободный небольшой чанк граничит с областью незамапленой памяти, то часть памяти может вернуться операцинной системе. Большие же чанки сразу возвращаются операционной системе.
Читать дальше →

© Habrahabr.ru