programing

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

codeshow 2023. 8. 10. 21:42
반응형

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

Python에서 변수와 메모리는 어떻게 관리됩니까?스택과 힙이 있으며 메모리 관리에 사용되는 알고리즘은 무엇입니까?이러한 지식을 바탕으로 대용량/데이터 크런치를 위한 메모리 관리에 대한 권장 사항이 있습니까?

Python에서 변수와 메모리는 어떻게 관리되고 있습니까?

자동으로!아니요, 실제로는 객체를 생성하면 Python Virtual Machine이 필요한 메모리와 메모리 레이아웃의 위치를 처리합니다.

스택과 힙이 있으며 메모리 관리에 사용되는 알고리즘은 무엇입니까?

우리가 얘기할 때CPython개체를 저장하기 위해 개인 힙을 사용합니다.CPython C API 설명서에서 다음을 참조하십시오.

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

메모리 회수는 대부분 참조 카운트를 통해 처리됩니다.즉, Python VM은 개체를 참조하는 참조 수에 대한 내부 저널을 유지하며, 개체를 참조하는 참조가 더 이상 없을 때 자동으로 해당 개체를 수집합니다.또한 모든 도달 가능한 객체를 찾으려는 기존 GC 알고리즘과 다소 반대되는 객체의 도달 불가능한 "섬"을 감지하여 순환 참조(참조 카운팅이 처리할 수 없는)를 깨는 메커니즘이 있습니다.

참고: 이 정보는 구체적입니다.다음과 같은 다른 파이썬 구현pypy,iron python,jython구현 세부 사항과 관련하여 다른 제품과 CPython 제품이 다를 수 있습니다.이를 더 잘 이해하려면 Python의 의미론(언어)과 기본 구현 사이에 차이가 있다는 것을 이해하는 데 도움이 될 수 있습니다.

이러한 지식을 바탕으로 대용량/데이터 크런치를 위한 메모리 관리에 대한 권장 사항이 있습니까?

이제 이것에 대해 말할 수는 없지만, NumPy(숫자 크랭킹에 가장 인기 있는 파이썬 라이브러리)는 메모리 소비를 우아하게 처리하는 메커니즘을 가지고 있다고 확신합니다.

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

파이썬에는 그런 것이 없습니다.

Python은 언어이며 구현이 정확히 어떻게 언어인 Python에 의해 정의된 의미를 달성해야 하는지 명시하지 않습니다.

모든 구현(CPython, PyPy, IronPython, Stackless, Jython...)은 자유롭게 자체 작업을 수행할 수 있습니다!

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출처

언급URL : https://stackoverflow.com/questions/14546178/does-python-have-a-stack-heap-and-how-is-memory-managed

반응형