메모리 관리의 주체는 운영체제이다.
메모리 공간이 남아 있으면 메모리는 데이터에게 메모리를 할당해준다.
응용 프로그램이 할당된 메모리를 해체하지 않는 한 운영체제는 쓰고 있는 메모리를 할당해주지 않는다.
예) 독서실 자리 같이 할당
1. 4가지 메모리 영역
위 3가지는 컴파일 할 때 만들어진다.
코드영역
스택영역
데이터 영역 = 스태틱 영역: 프로그램이 끝날 때까지 지워지지 않는다, IMMUTABLE 객체를 넣는다.
힙 영역: 동적 메모리 할당, 컴파일이 실행될 때 만들어진다.
컴파일 실행 때 코드, 스택, 데이터 영역이 만들어진다.
힙 영역은 컴파일 실행 후에 런타임 때 만들어진다.
고정
코드
데이터
가변영역
힙 영역: 내려가는 방향
스택 영역: 올라가는 방향
힙과 스택은 서로 오버플로우 관계이다. (겹칠 때)
스택: 입구가 하나만 있는 통으로 생각하면 되고 컴파일 할 때 결정된다.
파이썬은 메모리 누수를 고려하지 않지만
C언어는 메모리 누수를 고려한다.
2. 정적 할당 VS 동적 할당
정적 (메모리) 할당: 메모리 공간을 계산 후 메모리 공간 필요 정도가 분명할 때 메모리 공간을 할당한다.
메모리 사이즈 변화 불가하여 일반적인 변수 선언할 때 쓰는 할당법이다.
동적 (메모리) 할당: 프로그램 동작 중 메모리 공간을 바꿔가면서 할당해줄 수 있다.
임시적인 메모리가 필요할 때 사용한다. 동적 할당은 이름이 없는 변수와 똑같다. 이름이 없으므로 주소로 접근해야 한다. 즉, 포인터로서 쓸 수 있다. 즉 모든 변수가 주소를 받을 수 있는 reference형태로 되어있다.
비교
동적 할당 | 정적 할당 |
힙 영역에 할당 런타임에 이루어짐 +: 경제적 -: 더 이상 사용하지 않을 때 명시적으로 메모리를 해제해 주어야 한다. -> 메모리가 낭비된다. 메모리 누수 발생 (런타임 때 사람이 크기 결정) |
컴파일로 고정되는 데이터 영역에 할당 컴파일 타임에 이루어짐 +: 실행 도중 해제되지 않고 자동 회수된다. (블록이 끝나면 뺀다) -: 메모리 크기를 조절할 수 없다. |
3. 가비지 콜렉터
가비지: 이름이 존재하지 않는 객체
가비지를 컴퓨터 스스로가 뫄서 일정용량이 차면 알아서 지운다.
거시적으로 파이썬은 C보다 느리다.
JAVA와 파이썬은 컴퓨터 스스로 검토하고 지우기 때문이다. C는 사람이 지운다.??
'Programming Language > Python' 카테고리의 다른 글
[파이썬] DAY5 객체 지향론 (0) | 2022.01.20 |
---|---|
[파이썬] DAY3 그 동안의 개념으로 문제 풀어보기 (0) | 2022.01.20 |
[파이썬] DAY3 함수 (0) | 2022.01.18 |
[파이썬] DAY3 리스트(열거형) & 튜플 & 딕셔너리 (0) | 2022.01.18 |
[파이썬] DAY2 리스트 (0) | 2022.01.17 |