메모리 할당
프로그램이 실행되어 메모리에 올라갈때는 해당 프로그램이 사용가능한 메모리 영역을 os로 부터 할당 받는다.
할당 받은 메모리는 크게 4부분으로 나뉜다.
- 데이터 영역
- 코드 영역
- 스택 영역
- 힙 영역
데이터 영역
상수 값, 정적 변수, 글로벌 변수 등이 할당, 선언된다. 프로그램의 실행과 함께 메모리위에 올라가고, 종료와 함께 메모리에서 해제된다. 그렇기 때문에 정적 변수에 메모리가 큰 값을 할당하는 걸 조심해야 한다.
코드 영역
프로그램의 코드(명령어)가 저장된 공간이다. 해당 명령어를 통해 프로그램의 실행이 제어 된다.
스택 영역
함수 실행시 해당 영역에 필요한 메모리가 할당된다. 함수 내 지역변수, 매개변수, 함수 리턴값 등이 메모리 위에 올라간다. 함수 종료시 해당 영역은 해제되며 재귀 함수 호출을 잘못해 함수를 무한히 호출할 경우, 해당 스택 영역에 메모리가 다 차서 스택 오버플로우 에러가 난다.
힙 영역
프로그램 실행중 동적으로 할당되는 변수값이 저장되는 공간이다. (ex.List에 값 추가) C,C++ 등에서는 이런 동적 메모리 할당과 메모리 해제를 개발자가 직접 해줬어야 했고, 하지 않으면 힙 영역 역시 메모리가 다 차서(누수라고 한다.) Out of Memory 에러가 난다. (예기치 못하게)
여러 프로그래밍 언어에서 변수 메모리 할당
JAVA
힙 영역의 메모리 관리는 Garbage Collector
Garbage collection 이 무엇인가요? 왜 쓰나요? 어떤 문제가 있을까요?
PYTHON
everything is object x = 10 이렇게 선언시 int Object인 10이 할당되고, x 변수는 해당 object 주소를 가리키는 형태
y = x 새로운 int Object 생성 안하고 생성된 int Object 주소를 y 변수가 가리키는 형태
힙 영역의 메모리 관리는 python memory manager python/C api를 이용,
python은 내부가 C로 구현되어 있기에 c의 메모리 할당, 해제 함수를 사용해 구현됨.
Object를 가리키는 변수가 없다면 manager에 의해 메모리 해제 Object 내부에 자신을 얼마나 가리키고 있는지 count하는 변수가 존재 해당 변수가 0이 되면 메모리 해제 작업 동작
JAVASCRIPT
JAVA GC와 같은 방식으로 동작
ref)
메모리 할당
https://42place.innovationacademy.kr/archives/8371
python 메모리 할당
https://woochan-autobiography.tistory.com/867
javascript 메모리 할당
'text > common' 카테고리의 다른 글
mysql order by equal? (2) | 2023.12.05 |
---|---|
maven multi binding 문제 시 해결 (1) | 2023.10.12 |
transaction에 대한 구구절절 (0) | 2023.07.26 |
(내가 몰라서 한) TCP와 UDP의 간략한 정리 (0) | 2022.12.05 |
POST 길이, 용량 제한 (0) | 2022.11.25 |
댓글