프로그램이 동작하기 위해서는 프로그램이 메모리에 로드되어야 한다.
OS는 프로그램의 실행을 위한 메모리 공간을 제공하는데, 대표적으로 코드 / 데이터 / 스택 / 힙 영역으로 나눠져있다.
1. 코드 영역
실행할 프로그램의 코드가 저장되는 영역.
텍스트 영역이라고도 부름
CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리함
2. 데이터 영역
프로그램의 전역&정적& 변수, 상수가 저장되는 영역
프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸됨
3. 스택 영역
함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
함수의 호출과 함께 할당되며 함수의 호출이 완료되면 소멸
스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 함
스택 영역은 push 동작으로 데이터를 저장하고 pop 동작으로 데이터를 인출함
LIFO 방식에 따라 동작하므로 가장 늦게 저장된 데이터가 가장 먼저 인출됨.
스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됨
장점)
- 매우 빠른 액세스
- 변수를 명시적으로 할당 해제할 필요가 없음
- 공간은 CPU에 의해 효율적으로 관리되고 메모리가 단편화되지 않음
단점)
- 스택 크기 제한 있음
- 변수 크기를 조정할 수 없음
4. 힙 영역
사용자가 직접 관리할 수 있는 메모리 영역
사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됨
장점)
- 변수를 전역적으로 액세스할 수 있음
- 메모리 크기 제한 없음
단점)
- (상대적으로) 느린 액세스
- 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가 조각화되어 해제될 수 있음
- 변수를 할당하고 해제하는 책임이 사용자에게 있음
https://junghyun100.github.io/%ED%9E%99-%EC%8A%A4%ED%83%9D%EC%B0%A8%EC%9D%B4%EC%A0%90/
스택(Stack)과 힙(Heap) 차이점
해당 Post는 스택(Stack)과 힙(Heap) 차이점를 정리한 파일이다.
junghyun100.github.io