반응형

파이썬 메모리 구조

https://pearlluck.tistory.com/758

  • Code 영역 : 실행할 프로그램의 코드가 저장
  • Data 영역 : 전역변수/정적 변수를 저장하는 공간. 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸
  • Stack 영역 : 지역 변수/매개변수를 저장하는 공간. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸

Heap 영역 : 사용자의 동적 할당으로 생성되는 공간. 사용자의 공간의 크기를 직접 관리할 수 있다. 메소드 호출이 끝나도 소멸되지 않는다.

 

Heap 영역의 크기 :  프로그램이 실행되는 도중인 런타임에 사용자가 직접 결정 -> 동적 할당
Data 영역과 Stack 영역의 메모리 크기 : 컴파일 타임에 미리 결정 -> 정적 할당


고정적으로 메모리를 할당받는 것 보다,
런타임에 메모리를 할당받는 '동적할당'을 통해 'Heap 영역'을 사용하는 것이 더 효율적!

def f2(x):
    x = x + 1
    return x
    
def f1(x):
    x = x * 2
    y = f2(x)
    return y

y = 5
z = f1(y)

 




Heap vs Stack 비교


Stack영역이 클수록 Heap의 영역은 작아진다. 반면에 Heap영역이 클수록 Stack영역이 작아진다.

  • Stack
    • 이미 할당되어 있는 공간을 사용.
    • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
    • 한계가 있어 초과하게 삽입할 수 없다. -> 유연성이 낮음
  • Heap
    • 사용자가 할당해서 사용하는 공간
    • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

    
-> Stack의 속도가 훨씬 빠르다. (하지만, stack은 공간이 매우 적기 때문에 모든 응용에서 stack을 사용할 수는 없다.)


 

JAVA와 Python의 메모리 할당 방식 차이점


Java : static method는 Data 영역에 저장된다.
Python : static method든 class method든 자동으로 모든 객체들이 heap영역에 저장된다. -> 내부에서 효율적으로 메모리를 쓸수 있도록 자동적으로 동적할당 해주기 때문에, 사용자가 직접 메모리를 관리할 필요가 없다.

 


Reference

https://woochan-autobiography.tistory.com/867#2.%20%ED%8C%8C%EC%9D%B4%EC%8D%AC%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EA%B5%AC%EC%A1%B0

 

Python - 메모리 구조 및 메모리 할당 과정

목차 Everything is object in Python 파이썬의 메모리 구조 파이썬에서의 Heap 사용 파이썬에서의 메모리 할당 과정 Everything is object in Python x = 10 print(type(x)) >> C에서 x = 10 이렇게 변수를 할당하면, 메모리

woochan-autobiography.tistory.com

https://pearlluck.tistory.com/758

 

 

반응형

+ Recent posts