CPython - Что внутри хранится в стеке и куче? - PullRequest
16 голосов
/ 01 марта 2010

В C # типы значений (например, int, float и т. Д.) Хранятся в стеке. Параметры метода также могут храниться в стеке. Однако все остальное хранится в куче. Это включает списки, объекты и т. Д.

Мне было интересно, делает ли CPython то же самое внутри? Что он хранит в стеке и что помещает в кучу?

Ответы [ 2 ]

20 голосов
/ 01 марта 2010

Все объекты Python в реализации CPython идут в кучу. Вы можете подробно прочитать, как работает управление памятью в Python здесь в документации:

Управление памятью в Python включает в себя личную кучу , содержащую все объекты и структуры данных Python. Управление этой частной кучей обеспечивается внутренне менеджером памяти Python. Менеджер памяти Python имеет различные компоненты, которые имеют дело с различными аспектами динамического управления хранением, такими как совместное использование, сегментация, предварительное распределение или кэширование.

Обратите внимание, что Python сам по себе является просто языком и ничего не говорит о том, как должны работать внутренние компоненты, такие как управление памятью; это деталь, оставленная разработчикам.

12 голосов
/ 01 марта 2010

Среда выполнения Python работает только со ссылками на объекты (которые все живут в куче): то, что происходит в стеке Python (как операнды и результаты его операций с байт-кодом), всегда ссылается (на значения, которые существуют в другом месте ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...