구조

code 영역
- 소스코드가 기계어 형태로 저장됨.
- 읽기 전용.
- 프로그램 시작~종료까지 메모리에 있음.
data 영역
- 전역변수, 정적변수, 상수가 저장되는 곳.
- 프로그램 시작과 동시에 할당, 종료되면 메모리가 해제됨.
heap 영역
- 프로그램 실행중(런타임) 동적으로 할당된 데이터가 저장되는 곳.
(* 런타임: 컴파일이 끝난 프로그램이 사용자가 실행하여 동작하는 타임)
- 메모리의 자유 공간을 사용하여 데이터를 저장하므로 크기나 수명에 대한 동적인 요구에 대응할 수 있다.
- 런타임 중 메모리 할당이 필요한 경우 사용되며, 개발자가 직접 제어할 수 있다.
- 참조타입이 저장되는 영역
- FIFO 구조
stack 영역
- 소스코드가 컴파일러에 의해 기계어로 변환되는 시점(컴파일 타임)에 크기가 결정된다.
- 함수 호출과 관련된 정보를 저장하는 데 사용된다.
- 함수가 호출될 때마다 해당 함수의 지역변수, 매개변수, 반환주소, 함수 호출에 필요한 기타 정보가 저장된다.
- 함수가 종료되면 저장된 메모리를 해제
- 값 타임이 저장되는 영역
- LIFO 구조
힙과 스택은 언제 써야할까?
- 힙: 메모리 크기에 제한이 없기 때문에 데이터 크기를 모르거나 스택에 저장하기에 큰 데이터를 사용하는 경우
- 스택: 힙을 할당하는 경우 이외에 사용