RAM (Random access memory
- 자유롭게 내용을 읽고 쓰고 지울 수 있는 기억 장치
- 현재 사용 중인 프로그램이나 데이터가 저장되어 있음
- 전원이 차단되면 내용이 지워지는 휘발성 기억 장치
- 일반적으로 주기억장치 또는 메모리라고 불림
메모리 구조
프로그램이 실행되면 운영체제는 메모리에 공간을 할당해줍니다.

Stack
- 함수 호출과 관련 있는 변수 등이 저장되는 공간
- 컴파일 시점에 크기가 결정됨
- 할당받은 메모리의 높은 주소부터 낮은 주소 방향으로 데이터가 저장된다. (PUSH - 스택포인터 주소 감소, POP - 스택포인터 주소 증가)
- 재귀 호출 시 함수가 종료되지 않고 변수들이 계속 할당되면 Stack 영역을 벗어날 수 있음 - 스택 오버플로
Heap
- 개발자가 직접 할당하고 해제가 가능함
- 메모리 사용 후 메모리 해제를 하지 않으면 메모리 누수 발생
- 낮은 주소부터 높은 주소 방향으로 할당됨
- Stack 영역을 침범하면 Heap overflow 발생
Data
프로그램이 시작하면 할당되고, 프로그램이 종료되면 해제된다. 초기화된 전역 변수와 정적 변수가 저장되는 공간이다.
Code
프로그램의 소스코드가 기계어 형태로 저장된다.