1. 메모리 구조
애플리케이션을 개발하고 서버에 띄우게 되면 OS가 RAM 메모리를 할당해주고 그 곳에 로드되게 됩니다.
이때 OS로부터 할당받는 메모리는 4가지 영역으로 나누어집니다.
- Code(코드) 영역
- 프로그램의 코드가 저장되는 공간입니다.
- Data(데이터) 영역
- 전역 변수와 정적 변수가 저장되는 공간입니다.
- 프로그램 시작과 함께 할당되고 프로그램이 종료되면 해제됩니다.
- Stack(스택) 영역
- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 공간입니다.
- 함수의 호출과 함께 할당되며 함수 호출이 종료되면 해제됩니다.
- 메모리의 높은 주소에서 낮은 주소 방향으로 할당됩니다.
- Heap(힙) 영역
- 사용자에 의해 동적으로 할당되고 해제되는 공간입니다.
- Java - new, c - realloc 등을 사용하면 할당되는 공간입니다.
- 메모리의 낮은 주소에서 높은주소 방향으로 할당됩니다.
1. Stack(스택) 메모리 vs Heap(힙) 메모리
Stack(스택) | Heap(힙) | |
액세스 속도 | 매우 빠름 | 상대적으로 느림 |
액세스 가능 | 지역 변수만 접근 가능 | 전역적으로 접근 가능 |
할당 해제의 필요 | X | O (하지만 자동 할당 해제를 대부분 지원) |
공간 관리 | CPU가 담당 | 사용자(프로그램)가 담당 |
해제 시점 | 함수 호출 종료시 해제 | 사용자가 해제하거나 GC에 의해 해제 |
반응형