Выделена ли память указателям в стеке в CPython? - PullRequest
1 голос
/ 02 августа 2020

(реализация CPython) В x = 3 я знаю, что память для объекта int, содержащего примитивное значение 3, выделяется в куче. Выделено ли x (как ссылка на объект int) в стеке или в куче?

1 Ответ

1 голос
/ 02 августа 2020

Объекты в реализации CPython размещаются в куче, и то же самое происходит с «кадрами стека». Размер «кадра стека» предварительно вычисляется во время компиляции.

Однако по причинам, которые мне не на 100% ясны, существует использование стека C для вложенных вызовов функций (но не для аргументов или локальных переменных) . Это по-прежнему означает, что бесконечная рекурсия на CPython вызовет sh из-за исчерпания стека C намного раньше, чем исчерпание памяти. Можно было бы реализовать виртуальную машину для использования фиксированного количества C стека, независимо от того, насколько глубокой была вложенность вызовов в коде Python, но это не так.

Обратите внимание также, что небольшой целые числа (например, 3), однако, являются общими, то есть новый целочисленный объект не всегда выделяется. Поскольку целые числа неизменяемы, это трудно заметить, кроме случаев использования id, но это важная оптимизация по соображениям скорости.

...