- 위 그림과 같이, 프로그램이 실행되기 위해서는 운영체제(OS)가 프로그램의 정보를 메모리에 로드 해야 함
- 프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는, 메모리가 명령어와 데이터들을 저장해야 한다.
낮은 주소 (low memory) |
코드 | 실행할 프로그램의 코드 |
데이터 | 전역 변수, 정적 변수 | |
힙 | 사용자의 동적 할당 런타임에 크기가 결정됨 |
|
공유 라이브러리 영역 | ||
스택 | 지역변수 매개변수 컴파일 타임에 크기가 결정됨 |
|
높은 주소 (high memory) |
커널 영역 | 시스템 운영에 필요한 메모리 운영체제가 커널에 존재 사용자가 함부로 커널영역에 접근 불가 |
코드 영역
- 실행할 코드가 저장되는 영역
- 텍스트 영역
- CPU가 코드 영역에 저장된 명령을 하나씩 가져가서 처리
- 프로그램 시작부터 종료 될 때까지 메모리에 남아있음
데이터 영역
- 프로그램의 전역 변수와 정적 변수가 저장되는 영역
- 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸
힙 영역
- 프로그래머가 직접 공간을 할당, 해제하는 메모리 공간
- malloc() 또는 new 연산자를 통해 메모리를 할당하고, free() 또는 delete 연산자를 통해 메모리를 해제
- 힙 영역은 선입선출(FIFO, First-In First-Out)의 방식으로, 가장 먼저 들어온 데이터가 가장 먼저 인출
- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당
- 스택보다 느린 액세스
- 변수 할당 후 해제 필요
- 메모리 크기에 제한이 없음
스택 영역
- 프로그램이 자동으로 사용하는 임시 메모리 영역이다.
- 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이고, 함수 호출이 완료되면 사라짐
- 이때 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame) 이라고 함
- 푸시(push) 로 데이터를 저장하고, 팝(pop) 으로 데이터를 인출
- 후입 선출(LIFO, Last-In First-Out) 의 방식으로, 가장 나중에 들어온 데이터가 가장 먼저 인출
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당 되기 때문
- 높은 주소에서 낮은 주소 방향으로 할당 되기 때문에 커널에 침범하지 않음
- 힙 보다 빠른 액세스
- 변수의 명시적인 할당/해제 필요 없음
참조
https://all-young.tistory.com/17
https://jihyeong-ji99hy99.tistory.com/19
'웹' 카테고리의 다른 글
HTTP 패킷 구조 (0) | 2022.04.20 |
---|---|
URL / URI 차이 (0) | 2022.04.19 |
WEB / WAS의 차이 (0) | 2022.04.19 |
Session / Cookie 의 차이 (0) | 2022.04.19 |
TCP/IP 4 계층 (0) | 2022.04.19 |