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 выделения памяти.
CPython написан на C. Мы рассмотрим два важнейших аспекта управления памятью в Python:
1. Подсчет ссылок.
2. Сборка мусора.
while item := next(iterable):
print(item)
else:
print("Iterable is empty")
Проведя поиск while_stmt
ext(iterable):
print(item)
else:
print("Iterable is empty")
Документация содержит спецификацию языка, предназначенную для чтения человеком. Спецификация, предназначенная для машинного чтения, располагается в одном файле Grammarpython.gram.
#error
Наконец, директива #error выводит сообщение и заставляет препроцессор прервать обработку. При чтении исходного кода CPython эти директивы также можно смело игнорировать.
pragma
Директивы #pragma содержат инструкции или рекомендации для компилятора. Как правило, при чтении кода на них можно не обращать внимания, так как обычно они влияют на компиляцию кода, а не на его выполнение.