파이썬 메모리 구조
- 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
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
'CS' 카테고리의 다른 글
[Python] 메모리 구조 및 메모리 할당 (1) | 2025.04.24 |
---|---|
docker 에 대해서 (Feat. 간단한 실습, 이미지 pull 부터 삭제까지) (0) | 2024.11.27 |
[인프라] Grid Computing vs Cloud Computing (15) | 2024.11.13 |