Есть ли у Python стек / куча и как управляется память?
как переменные и память управляются в Python? Есть ли у него стек и куча и какой алгоритм используется для управления памятью? Учитывая эти знания, есть ли какие-либо рекомендации по управлению памятью для большого количества данных хруст?
2 ответа:
как переменные и память управляются в Python.
автомагически! Нет, действительно, Вы просто создаете объект, и виртуальная машина Python обрабатывает необходимую память и где она должна быть размещена в макете памяти.
есть ли у него стек и куча и какой алгоритм используется для управления память?
когда мы говорим о
CPython
использует кучу для хранения объектов. из документации CPython C API:управление памятью в Python включает в себя кучу, содержащий все Объекты и структуры данных Python. Управление этим частным куча обеспечивается внутренне диспетчером памяти Python. питон диспетчер памяти имеет различные компоненты, которые имеют дело с различными динамические аспекты управления хранилищем, такие как совместное использование, сегментация, предварительное выделение или кэширование.
восстановление памяти является в основном обрабатывается подсчет ссылок. То есть, виртуальная машина Python ведет внутренний журнал того, сколько ссылок ссылается на объект, и автоматически собирает мусор, когда больше нет ссылок, ссылающихся на него. Кроме того, есть механизм для разрыва круговых ссылок (который отсчет ссылок не может обрабатывать) путем обнаружения недостижимых "островов" объектов,несколько в обратном направлении традиционных алгоритмов GC которые пытаются найти все достижимые объекты.
Примечание: пожалуйста, имейте в виду, что эта информация
CPython
конкретные. Другие реализации python, такие какpypy
,iron python
,jython
и другие могут отличаться друг от друга и от CPython, когда речь заходит о специфике их реализации. Чтобы понять это лучше,это может помочь понять, что есть разница между Python семантика (язык) и лежащее в основе реализациядали эти знания существуют ли какие-либо рекомендации по управлению памятью для большого количества/хруст сведения?
сейчас я не могу об этом говорить, но я уверен, что включает в себя (самая популярная библиотека python для хруста чисел) имеет механизмы, которые изящно обрабатывают потребление памяти.
если вы хотите узнать больше о внутренних компонентах Python, взгляните на эти ресурсы:
- шагая через CPython (видео)
- презентация о внутренностях виртуальной машины Python
- в истинном хакерском духе,CPython объект распределитель исходный код
Python не имеет любой такой вещи.
Python-это язык и не уточняет, как именно реализации должен достичь семантики, определенной Python языка.
каждая реализация (CPython, PyPy, IronPython,Stackless, языка Jython...) волен делать свое дело!
In CPython,все объекты живут на куча:
управление памятью в Python включает в себя кучу, содержащий все объекты Python и структуры данных.1
виртуальная машина CPython основана на стеке:
>>> def g(): x = 1 y = 2 return f(x, y) >>> import dis >>> dis.dis(g) 2 0 LOAD_CONST 1 (1) # Push 1 onto the stack 3 STORE_FAST 0 (x) # Stores top of stack into local var x 3 6 LOAD_CONST 2 (2) # Push 2 onto stack 9 STORE_FAST 1 (y) # Store TOS into local var y 4 12 LOAD_GLOBAL 0 (f) # Push f onto stack 15 LOAD_FAST 0 (x) # Push x onto stack 18 LOAD_FAST 1 (y) # Push y onto stack 21 CALL_FUNCTION 2 # Execute function with 2 # f's return value is pushed on stack 24 RETURN_VALUE # Return TOS to caller (result of f)
имейте в виду, что это CPython конкретного. Стек не содержит фактический значения, хотя, он хранит ссылки на эти объекты.
1:источник