📌 메모리 할당
◾ 사용자가 프로그램 실행
◾ OS가 보조기억장치에 저장된 프로그램을 메모리에 로드해 메모리 할당
📌 메모리 공간
✅ 코드(Code) 영역
◾ 할당 대상 : 명령어(함수, 제어문, 상수 등)
◾ 텍스트 영역 : 작성한 소스코드가 저장되는 영역
◾ 기계어 형태로(0,1) 저장
✅ 데이터(Data) 영역
◾ 할당 대상 : 전역 변수, 정적(static) 변수
◾ 프로그램 시작 시 할당, 프로그램 종료 시 메모리 소멸
✅ 힙(Heap) 영역
◾ 할당 대상 : 참조형 데이터 타입을 갖는 객체, 배열
◾ 동적 할당(Dynamic Memory Allocation) : 힙 영역에 메모리 할당하는 것
◾ 사용자에 의해 메모리 할당, 프로그램 실행 시 프로그램 내 가비지 컬렉터/프로그램 종료 시 OS 가비지 컬렉터가 메모리 해제
◾ 선입선출(FIFO, First In First Out) 구조 : 가장 먼저 저장된 데이터가 먼저 인출
◽ 메모리의 낮은 주소 ➡ 높은 주소 방향으로 할당
✅ 스택(Stack) 영역
◾ 할당 대상 : 지역 변수, 매개변수
◾ 함수 호출 시 할당, 함수 호출 완료 시 소멸
◾ 후입선출(LIFO, Last In First Out) 구조 : 가장 늦게 저장된 데이터가 먼저 인출
◽ 메모리의 높은 주소 ➡ 낮은 주소 방향으로 할당
📌 힙과 스택의 OVERFLOW
◾ 힙과 스택은 같은 영역을 공유
◾ 각 영역이 상대 공간을 침범하면 ➡ Heap / Stack Overflow 발생