본문 바로가기

Programming/STUDY

[CS] 메모리의 구조

최근에 '읽고나면 진짜 쉬워지는 자료구조'라는 책을 읽고 있는데 1장의 제목이 '메모리 안 정보'였다. 변수, 배열, 문자열 등 자료구조에 대한 내용은 이해가 됐지만 정작 그 제목이 잘 이해되지 않았다. 이에 따라 프로그램 실행과 메모리의 관계, 메모리의 구조에 대해 찾아보며 메모리 내부에 정보가 어떻게 할당되는지 이해하려고 했다.


 

 

프로그램의 실행

 
프로그램은 메모리에 로드(load)된 후 실행된다. (=프로세스)

실행 중에는 프로그램에서 사용하는 변수들을 저장할 메모리 공간도 필요하다.
 
=> 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다.

 
 

메모리의 구조

  

코드 영역 (=텍스트 영역)

: 실행할 프로그램의 코드가 저장되는 영역

 

CPU => 코드 영역에 저장된 명령어를 하나씩 가져가서 처리함
 

 

데이터 영역

: 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역
 

프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸

 

 

스택 영역

: 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
 

함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸

 

※ 스택 프레임 : 스택 영역에 저장되는 함수의 호출 정보

 

 

힙 영역

: 사용자에 의해 메모리 공간이 동적으로 할당되는 영역
 

사용자가 할당, 해제 관리해야 함

메모리의 낮은 주소에서 높은 주소의 방향으로 할당됨
 

 

※ Heap Overflow, Stack Overflow

Heap - Stack 영역은 같은 공간을 공유해 반비례 관계

(Heap이 메모리 위쪽 주소부터 할당되면 Stack은 아래쪽부터 할당)

=> 각 영역이 상대 공간을 침범하는 일이 발생할 수 있음

 


 
 
참고