본문 바로가기
Computer Science

#3 python의 메모리 할당과 관리 (Stack & Heap Memory)

by 데이터현 2021. 12. 29.

https://hkim-data.tistory.com/181

 

#2 python의 메모리 할당과 관리 (Everything is object in Python)

2021.12.29 - [Comuter Science] - #1 python 메모리 구조 #1 python 메모리 구조 최근 기술면접에서 메모리 영역에 대한 질문을 받았는데, 예전 학부 수업때 잘 공부했고 당연히 알고 있다고 생각했는데 당황 +

hkim-data.tistory.com

이전 포스팅에 이어 이제 실제 Stack과 Heap 메모리에서 어떻게 동작하는지 알아보자.

 

백그라운드 메모리 구성은 모든 프로세스가 일부 메모리와 함께 운영 체제에 의해 할당된다.
마찬가지로 python 인터프리터는 실행을 위해 메모리를 할당받는데, 이는 파이썬의 버전 및 환경 세팅에 의해 결정되고, 우리는 보통 그것에 대해 크게 걱정할 필요가 없다.

이 메모리는 두 영역으로 나뉜다. 힙 메모리와 스택 메모리인데, 기본적으로 스택 메모리로부터 메서드가 실행된다.

 

python은 main 함수부터 코드를 실행함.

객체는 보통 heap 메모리에 생성되는 반면에 참조자는 stack 메모리에 생성된다.

이 코드를 실행한다.

 

1. y = 5

main 함수에서 y = 5를 실행하게 되면

아래와 같이 5라는 int 객체는 heap

메모리에 생성되고, y라는 참조자는 stack 메모리에 생성된다.

2. z = f1(y)

 

이어서 main 메소드에서 z = f1(y) 를 실행하게 되면,

f1( ) 함수가 스택 메모리에 쌓이고, z라는 지역변수가 main 함수에 생성된다.

이어서 f1 함수에 y가 참조하는 5가 전달되게 되면서 f1의 x5 객체를 가리키게 된다.

f1의 지역변수 x가 5를 참조한다.

x = x * 2에 의해 x가 10 객체를 가리키게 된다.

 

y = f2(x)에 의해 f2함수를 불러오게 된다.

f2 함수가 스택 메모리에 쌓이게 되고 f2 지역변수 x가 생성되고, f1 지역변수 y가 생성됨

f2 지역변수 x는 10을 전달받으면서 x를 가리키게 된다.

이어서 x = x + 1 에 의해 11을 가리키게 된다.

f2함수에서의 return x에 의해 y는 11을 참조하게 된다.

 

메모리 해제

f2 함수는 return 되면서 stack memory에서 해제된다.

 

return y에 의해서 z는 11을 가리키게 된다.

 

f1 함수는 리턴되게 되면서 stack 메모리에서 해제된다.

또한 f1함수의 지역변수 x도 stack 메모리에서 사라지게 되면서 10을 가리키는 참조자가 없어지게 된다.

10을 가리키는 참조자(래퍼런스)가 0이 되면서 heap 메모리에서 10객체도 사라지게 된다.

 

지금까지 변수와 함수가 어떻게 stack과 heap 메모리에 할당되고 해제되는지 알아봤다.

 

다음 포스팅에선 class가 어떻게 메모리에 할당되고 self가 무엇인지 메모리 관점에서 알아보도록 하겠다.

 

https://hkim-data.tistory.com/183

 

#4 python의 메모리 할당과 관리 (Class와 self)

https://hkim-data.tistory.com/182 #3 python의 메모리 할당과 관리 (Stack & Heap Memory) https://hkim-data.tistory.com/181 #2 python의 메모리 할당과 관리 (Everything is object in Python) 2021.12.29 -..

hkim-data.tistory.com

참조

https://www.youtube.com/watch?v=arxWaw-E8QQ 

댓글