본문 바로가기

메모리 구조 (코드, 데이터, 힙 , 스택)

- 위 그림과 같이, 프로그램이 실행되기 위해서는 운영체제(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