Python에 스택 / 힙이 있으며 메모리는 어떻게 관리됩니까?
Python에서 변수와 메모리는 어떻게 관리됩니까? 스택과 힙이 있으며 메모리 관리에 사용되는 알고리즘은 무엇입니까? 이 지식을 감안할 때 많은 수 / 데이터 처리를위한 메모리 관리에 대한 권장 사항이 있습니까?
Python에서 변수와 메모리를 관리하는 방법.
자동으로! 아니요, 실제로는 객체를 생성하기 만하면 Python 가상 머신이 필요한 메모리를 처리하고 메모리 레이아웃에서 배치 할 위치를 처리합니다.
스택과 힙이 있으며 메모리 관리에 어떤 알고리즘이 사용됩니까?
우리가 얘기 할 때 CPython
그것을 사용하는 개인 힙 오브젝트를 저장합니다. CPython C API 문서에서 :
Python의 메모리 관리에는 모든 Python 개체와 데이터 구조를 포함하는 개인 힙이 포함됩니다. 이 비공개 힙의 관리는 Python 메모리 관리자에 의해 내부적으로 보장됩니다. Python 메모리 관리자에는 공유, 세분화, 사전 할당 또는 캐싱과 같은 다양한 동적 스토리지 관리 측면을 처리하는 다양한 구성 요소가 있습니다.
메모리 재 확보는 대부분 참조 계산에 의해 처리됩니다 . 즉, Python VM은 개체를 참조하는 참조 수에 대한 내부 저널을 유지하고이를 참조하는 참조가 더 이상 없을 때 자동으로 가비지 수집합니다. 또한 도달 할 수 있는 모든 객체를 찾으려고하는 기존 GC 알고리즘 과 다소 반대로 도달 할 수없는 객체 "섬"을 감지하여 순환 참조 (참조 계산으로 처리 할 수 없음) 를 끊는 메커니즘이 있습니다.
참고 : 이 정보는CPython
구체적이라는 점에 유의하십시오. 다른 파이썬과 같은 구현,pypy
,iron python
,jython
그것은 그들의 구현 세부 사항에 관해서 다른 사람들은 서로와 CPython과 다를 수 있습니다. 이를 더 잘 이해하려면 Python의 의미 (언어)와 기본 구현간에 차이가 있음을 이해하는 것이 도움이 될 수 있습니다.
이 지식을 감안할 때 많은 수 / 데이터 처리를위한 메모리 관리에 대한 권장 사항이 있습니까?
이제 이것에 대해 말할 수는 없지만 NumPy (숫자 처리를위한 가장 인기있는 파이썬 라이브러리)에는 메모리 소비를 정상적으로 처리하는 메커니즘이 있습니다.
Python의 내부에 대해 더 자세히 알고 싶다면 다음 리소스를 살펴보세요.
- CPython 단계별 실행 (동영상)
- Python 가상 머신의 내부에 대한 프레젠테이션
- 진정한 해커 정신에서 CPython Object Allocator 소스 코드
파이썬은없는 어떤 그런 일을.
Python은 언어 이며 구현 이 Python에서 정의한 의미를 얼마나 정확히 달성해야 하는지를 지정하지 않습니다 .
모든 구현 (CPython, PyPy, IronPython, Stackless , Jython ...)은 자체 작업을 자유롭게 수행 할 수 있습니다!
에서 C 파이썬, 모든 객체는 힙에 살고 :
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 : 소스
참고 URL : https://stackoverflow.com/questions/14546178/does-python-have-a-stack-heap-and-how-is-memory-managed
'program tip' 카테고리의 다른 글
HttpWebRequest.GetResponse () 실패시 오류 정보를 얻는 방법 (0) | 2020.10.10 |
---|---|
제네릭 클래스의 기본 생성자 구문은 무엇입니까? (0) | 2020.10.10 |
Angular 2의 pipe () 함수는 무엇입니까? (0) | 2020.10.10 |
SQL을 통해 활성 사용자를 postgreSQL 데이터베이스에 연결하려면 어떻게해야합니까? (0) | 2020.10.10 |
gnuplot 대 Matplotlib (0) | 2020.10.10 |