개발자 블로그

파이썬 메모리 구조 본문

파이썬/알쓸신잡

파이썬 메모리 구조

hayongwoon 2022. 6. 28. 17:56

파이썬 메모리 구조

Text 영역: 코드 영역이라고 하며 실행할 프로그램의 코드가 저장되는 영역이라고 한다. CPU는 텍스트 영역에 저장 된 명령어를 하나 씩 처리한다.

 

Data 영역: 전역 변수와 정적 변수 즉, globals()에 등록된 변수를 저장하는 영역이며, 프로그램 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

 

Stack 영역: 지역 변수(함수 내부 변수)와 매개변수 즉, locals()에 등록된 변수를 저장하는 공간이다. 그러므로 당연히 함수가 실행이 될 때 함께 할당이 되고 함수가 종료되면 소멸된다.

 

Heap 영역: 사용자의 동적 할당으로 생성되는 영역이며, 사용자가 공간의 크기를 직접 관리할 수 있다고 한다. 해당 영역의 크기는 프로그램이 실행되는 도중인 런타임 동안 사용자가 직접 결정하게 된다. 반면 데이터, 스택 영역의 메모리 크기는 컴퍼일 타임에 미리 결정이 된다.

 

예를 들어 사용자가 2만명고 현재 접속자는 10%인 약 2천 명이라고 하자! 이 경우 항상 2만명 분의 메모리를 할당하고자 한다면 비효율이 일어날 것이다. 떄문에 회원이 접속할 때만 메모리를 할당하게 한다면 더욱 효율적으로 관리할 수 있을 것이다. 이러한 이유로 동적할당으로 힙 영역을 적절하게 사용한다면 메모리의 낭비를 줄일 수 있을 것이다. 런타임에 메모리가 할당 받는 것을 동적 할당이라고 한다.

 

파이썬에서의 Heap 메모리 사용

C나 java는 malloc 함수를 이용해 동적 할당을 사용자가 조절할 수 있다. 하지만 파이썬의 경우 동적 할당 기능이 없다고한다. 왜냐면 자동으로 메모리를 관리해주기 때문이라고 한다. 그렇다면 stack 영역만 사용한다고 말할 수는 없다. 파이썬에서는 파이썬 메모리 메니저라는 기능이 있는데 python/C API를 통해 스토리지를 동적으로 관리한다고 한다. 스토리지의 동적 관리가 필요할 때는 메모리의 공유, 세분화, 사전 할당 그리고 캐싱이 있다.

 

heap 안의 메모리 영역을 인터프리터가 포인터를 사용해 영역의 범위를 조정해준다. 그러므로 인터프린터가 자동으로 메모리를 OS로 할당하지 않고 갖고만 있다가 사용이 될 때 메모리를 재사용하는 방식으로 운영이 된다. 즉, 메모리 할당에 있어 OS과부하를 줄여주는 높은 레벨의 언어인 듯 하다.

 

변수와  함수가 호출됨에 따라 적절한 메모리를 시기적절하게 파이썬 메모리 매니저가 OS에게 할당하고 결과값이 리턴되거나 변수와 함수가 사용을 멈출 때, 바로 소멸되는 형식이라고 한다.