본문 바로가기
Programming Language/Python

[파이썬] DAY4 메모리

by 9루트 2022. 1. 19.

메모리 관리의 주체는 운영체제이다.

메모리 공간이 남아 있으면 메모리는 데이터에게 메모리를 할당해준다.

응용 프로그램이 할당된 메모리를 해체하지 않는 한 운영체제는 쓰고 있는 메모리를 할당해주지 않는다.

예) 독서실 자리 같이 할당

 

1. 4가지 메모리 영역

위 3가지는 컴파일 할 때 만들어진다.

코드영역

스택영역

 

데이터 영역 = 스태틱 영역: 프로그램이 끝날 때까지 지워지지 않는다, IMMUTABLE 객체를 넣는다.

힙 영역: 동적 메모리 할당, 컴파일이 실행될 때 만들어진다.

 

컴파일 실행 때 코드, 스택, 데이터 영역이 만들어진다.

힙 영역은 컴파일 실행 후에 런타임 때 만들어진다.

 

 

 

고정

코드

데이터

 

가변영역

힙 영역: 내려가는 방향

스택 영역: 올라가는 방향

힙과 스택은 서로 오버플로우 관계이다. (겹칠 때)

 

스택: 입구가 하나만 있는 통으로 생각하면 되고 컴파일 할 때 결정된다. 

 

 

파이썬은 메모리 누수를 고려하지 않지만

C언어는 메모리 누수를 고려한다.


2. 정적 할당 VS 동적 할당

정적 (메모리) 할당: 메모리 공간을 계산 후 메모리 공간 필요 정도가 분명할 때 메모리 공간을 할당한다.

메모리 사이즈 변화 불가하여 일반적인 변수 선언할 때 쓰는 할당법이다.

 

동적 (메모리) 할당: 프로그램 동작 중 메모리 공간을 바꿔가면서 할당해줄 수 있다.

임시적인 메모리가 필요할 때 사용한다. 동적 할당은 이름이 없는 변수와 똑같다. 이름이 없으므로 주소로 접근해야 한다. 즉, 포인터로서 쓸 수 있다. 즉 모든 변수가 주소를 받을 수 있는 reference형태로 되어있다.

 

비교

동적 할당 정적 할당
힙 영역에 할당
런타임에 이루어짐

+: 경제적
-: 더 이상 사용하지 않을 때 명시적으로 메모리를 해제해 주어야 한다. -> 메모리가 낭비된다. 메모리 누수 발생 (런타임 때 사람이 크기 결정)
컴파일로 고정되는 데이터 영역에 할당
컴파일 타임에 이루어짐

+: 실행 도중 해제되지 않고 자동 회수된다. (블록이 끝나면 뺀다)
-: 메모리 크기를 조절할 수 없다.

3. 가비지 콜렉터

가비지: 이름이 존재하지 않는 객체

가비지를 컴퓨터 스스로가 뫄서 일정용량이 차면 알아서 지운다.

 

거시적으로 파이썬은 C보다 느리다.

JAVA와 파이썬은 컴퓨터 스스로 검토하고 지우기 때문이다. C는 사람이 지운다.??