메모리의 구조에 대해서 알아보자.
프로그램이 실행되기 위해선 메모리에 load가 되어야 한다.
운영체제가 프로그램을 실행하면 주기억장치 RAM에 메모리가 할당된다.
그 공간을 크게 4개로 나누는데 그 네가지는
1. Code(코드) 영역
2. Data(데이터) 영역
3. Stack(스택) 영역
4. Heap(힙) 영역이다.

1. Code(코드) 영역
코드 영역은 프로그램이 저장되는 위치로 TEXT(텍스트) 영역이라고도 한다. 프로그래머가 작성한 코드를 CPU가 한 줄씩 읽으며 처리한다.
읽기만 가능한 ReadOnly이다.
2. Data(데이터) 영역
전역 변수와 Static(정적) 변수가 저장되는 곳이다. 프로그램이 끝날때까지 메모리에 남아있는다.
이때 초기화된 데이터는 data영역에 저장되고, 초기화되지 않은 데이터는 BSS라는 Block Stated Symbol 영역에 저장된다.
3. Stack(스택) 영역
프로그램이 자동으로 사용하는 임시 메모리 영역이고,
함수의 호출과 연관된 지역변수, 매개변수가 저장되는 영역이다.
함수가 호출되면 할당되고 함수가 종료하면 소멸한다.
4. Heap(힙) 영역
힙 영역은 동적인 공간으로 사용자가 직접 관리하는 공간이다.
프로그래머가 동적으로 메모리를 할당하고 해제해야 한다.
C나 C++에서는 new, malloc()을 통해 할당하고 delete, free()를 통해 해제한다.
Java도 new를 통해 할당하는 것은 같으나, Garbage Collector에 의해 자동으로 해제된다.
Code와 Data영역은 컴파일 시 크기가 결정되고
Stack과 Heap영역은 런타임에 크기가 결정된다.
스택의 크기는 좀 복잡한데 컴파일때 그 크기가 정해지고 스택에 몇 개가 쌓일지는 런타임때 결정된다고 한다.
'프로그래밍 이론 & 책 > 기타' 카테고리의 다른 글
| [git] 커밋 합치기 (0) | 2020.12.16 |
|---|---|
| 클래스와 객체, 인스턴스 (Class, Object, Instance) (0) | 2020.01.29 |