program tip

Python에 스택 / 힙이 있으며 메모리는 어떻게 관리됩니까?

radiobox 2020. 10. 10. 09:53
반응형

Python에 스택 / 힙이 있으며 메모리는 어떻게 관리됩니까?


Python에서 변수와 메모리는 어떻게 관리됩니까? 스택과 힙이 있으며 메모리 관리에 사용되는 알고리즘은 무엇입니까? 이 지식을 감안할 때 많은 수 / 데이터 처리를위한 메모리 관리에 대한 권장 사항이 있습니까?


Python에서 변수와 메모리를 관리하는 방법.

자동으로! 아니요, 실제로는 객체를 생성하기 만하면 Python 가상 머신이 필요한 메모리를 처리하고 메모리 레이아웃에서 배치 할 위치를 처리합니다.

스택과 힙이 있으며 메모리 관리에 어떤 알고리즘이 사용됩니까?

우리가 얘기 할 때 CPython그것을 사용하는 개인 힙 오브젝트를 저장합니다. CPython C API 문서에서 :

Python의 메모리 관리에는 모든 Python 개체와 데이터 구조를 포함하는 개인 힙이 포함됩니다. 이 비공개 힙의 관리는 Python 메모리 관리자에 의해 내부적으로 보장됩니다. Python 메모리 관리자에는 공유, 세분화, 사전 할당 또는 캐싱과 같은 다양한 동적 스토리지 관리 측면을 처리하는 다양한 구성 요소가 있습니다.

메모리 재 확보는 대부분 참조 계산에 의해 처리됩니다 . 즉, Python VM은 개체를 참조하는 참조 수에 대한 내부 저널을 유지하고이를 참조하는 참조가 더 이상 없을 때 자동으로 가비지 수집합니다. 또한 도달 할 수 있는 모든 객체를 찾으려고하는 기존 GC 알고리즘다소 반대로 도달 할 수없는 객체 "섬"을 감지하여 순환 참조 (참조 계산으로 처리 할 수 ​​없음) 를 끊는 메커니즘이 있습니다.

참고 : 이 정보는CPython구체적이라는 점에 유의하십시오. 다른 파이썬과 같은 구현,pypy,iron python,jython그것은 그들의 구현 세부 사항에 관해서 다른 사람들은 서로와 CPython과 다를 수 있습니다. 이를 더 잘 이해하려면 Python의 의미 (언어)와 기본 구현간에 차이가 있음을 이해하는 것이 도움이 될 수 있습니다.

이 지식을 감안할 때 많은 수 / 데이터 처리를위한 메모리 관리에 대한 권장 사항이 있습니까?

이제 이것에 대해 말할 수는 없지만 NumPy (숫자 처리를위한 가장 인기있는 파이썬 라이브러리)에는 메모리 소비를 정상적으로 처리하는 메커니즘이 있습니다.

Python의 내부에 대해 더 자세히 알고 싶다면 다음 리소스를 살펴보세요.


파이썬은없는 어떤 그런 일을.

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

반응형