파이썬 메모리 영역

asda주asda·2022년 2월 23일
1

Python

목록 보기
30/31

메모리 영역


출처: https://armontad-1202.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD

메모리에는 4가지 영역이 있다.
코드 영역, 데이터 영역, 힙 영역, 스택 영역

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

데이터 영역: 전역 변수, 정적(static) 변수를 저장하는 공간으로 프래그램의 시작과 함께 할당되며, 프로그램의 종료시 소멸한다.

힙 영역: 사용자의 동적 할당으로 생성되는 공간이다. 이러한 특징으로 인해 사용자가 공간의 크기를 직접 관리할 수 있다.

스택 영역: 지역 변수와 매개 변수를 저장하는 공간으로 함수의 호출과 함께 할당되며 함수의 종료시 소멸한다.

스택 영역

스택 영역은 FILO(First In Last Out) 구조로, 먼저 들어온 데이터가 늦게 나가는 형식이다.
1, 2, 3 순으로 들어갔으나, 3, 2, 1 으로 빠져나온다.

스택 영역이 제일 많이 활용되는 구간은 재귀 알고리즘이다. 재귀 알고리즘이란, 어떤 문제보다 조금 작은 하위 문제를 해결함으로써 그 문제를 해결하는 알고리즘이다.
즉, 함수 안의 함수라고 할 수 있다. 함수 안의 함수를 해결하여 바깥의 함수를 해결하는 형식입니다. 재귀적으로 함수를 호출해야 하는 경우, 임시 데이터를 스택에 넣어줍니다.

함수를 호출할 때, 그 함수의 매개변수, 지역변수는 스택영역에 할당되며, 함수의 소멸 시, 변수들도 함께 소멸된다.

힙 영역

힙 영역의 크기는 프로그램이 실행되는 도중인 런타임(run time)에 사용자가 직접 결정하게 됩니다. 반면에 데이터 영역과 스택 영역의 메모리 크기는 컴파일 타임에 미리 결정됩니다.

예를 들어, 게임의 회원수가 1000명이지만 동시 접속자 수는 그 중 10%, 100명 정도인 게임을 운영하는 게임 회사가 있다. 게임의 회원수가 1000명이라고 하여 1000명분의 메모리를 고정적으로 지정하면 그 중 10프로만 메모리가 사용되어지고 나머지 90%는 사용되어지지 않은 채 메모리 공간만 잡아먹게 되어 시간과 비용적으로 비생산적이고 비효율적이게 된다. 하지만 회원이 게임을 접속할때만(프로그램이 실행되는 도중인 run time때) 동적 할당을 사용하게 되면 사용자가 게임을 접속할 때 필요한 메모리만 할당하게 된다. 그렇게 되면 더욱 효율적이고 생산적으로 메모리를 관리할 수 있게 된다.

이러한 이유로 동적 할당으로 힙 영역을 적절한 곳에 사용하게 된다면 메모리의 낭비 없이 생산적으로 메모리를 할당할 수 있게 됩니다. 런타임에 메모리가 할당받는 것을 메모리의 동적 할당(dynamic allocation)이라고 이다.

C, C++, 또는 Java의 경우 malloc과 같은 함수를 이용해서 동적할당을 사용할 수 있다. 하지만, 파이썬은 동적 할당의 기능이 없다. 즉, 사용자가 직접 메모리 할당범위를 조정하지 않는다. 왜냐하면 파이썬은 자동으로 메모리를 관리해주는 언어이기 때문이다.

0개의 댓글

관련 채용 정보