CPython использует два аллокатора34:
1. malloc: аллокатор операционной системы для выделения сырой памяти.
2. pymalloc: аллокатор CPython для выделения объектной памяти и PyMem.
Области выделения памяти
CPython поддерживает три области динамического выделения памяти:
1. Область сырой (raw) памяти — используется для выделения памяти из системной кучи и больших объемов памяти, а также если она выделяется не для объектов Python.
2. Область объектной (object) памяти — используется для выделения памяти для всех объектов Python.
3. Область PyMem — то же, что PYMEM_DOMAIN_OBJ. Этот тип существует для обеспечения совместимости со старыми API.
В C существуют три механизма выделения памяти:
1. Статическое выделение памяти: требования к памяти вычисляются во время компиляции, а память выделяется исполняемым файлом при запуске.
2. Автоматическое выделение памяти: память для области видимости выделяется из стека вызовов при входе в кадр и освобождается при завершении кадра.
3. Динамическое выделение памяти: память запрашивается и выделяется динамически во время выполнения через вызов API выделения памяти.