Computer Science

(메모리)코드, 데이터, 힙, 스택 영역

닉네임못짓는사람 2022. 1. 15. 06:55
반응형

프로그램을 실행시키면, 운영체제는 프로그램을 위해 메모리 공간을 할당해준다.

프로그램이 운영체제로부터 할당받는 메모리 공간은 총 4개 영역으로 구분할 수 있다.

  1. 코드(Code) 영역
  2. 데이터(Data) 영역
  3. 힙(Heap) 영역
  4. 스택(Stack) 영역

코드(Code) 영역

  • 코드 영역에는 실행할 프로그램의 코드와 매크로 상수가 기계어 형태로 저장된다.
  • 다른 이름으로 텍스트(Text) 영역이라고도 부른다.
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가 처리한다.
  • 컴파일 타임에 결정되고, 중간에 변경이 불가능하도록 Read-Only로 되어있다.
  • 프로그램 시작부터 종료까지 메모리에 남는다.

 

데이터(Data) 영역

  • 프로그램의 전역변수와 정적 변수(static변수 등)가 저장되는 공간이다.
  • 프로그램 시작과 동시에 메모리에 할당되고, 종료시에 메모리에서 소멸한다.

 

힙(Heap) 영역

  • 프로그래머가 직접 공간을 할당, 해제하는 동적 메모리 공간이다.
  • 런타임 시에 결정되며, malloc 또는 new 등으로 메모리를 할당하고, calloc 또는 free 등으로 메모리를 해제한다.
  • 메모리의 낮은 주소에서 높은 주소 방향으로 할당되며 선입선출(FIFO) 구조를 가지고 있다.
  • 사용 후 메모리 해제를 하지 않으면 메모리 누수(memory leak)가 발생한다.

 

스택(Stack) 영역

  • 함수 내에 선언된 지역변수, 매개변수, 리턴 값, 함수 호출 시 이전 함수의 주소 등이 저장된다.
  • 함수 호출 시 생성되고, 함수 종료 시 소멸한다.
  • 메모리의 높은 주소에서 낮은 주소 방향으로 할당되며 후입선출(LIFO)구조를 가지고 있다.
  • 컴파일 시에 크기가 결정되며, 크기가 stack영역을 초과하면 stack overflow가 발생한다.
반응형

'Computer Science' 카테고리의 다른 글

해시맵(HashMap)  (0) 2022.02.01
[알고리즘/정렬] 선택, 버블, 삽입, 병합, 퀵, 힙  (0) 2022.01.16
[자료구조] 트리(Tree)  (0) 2022.01.13
동기(Synchronous)와 비동기(Asynchronous)  (0) 2022.01.11
JSON이란?  (0) 2022.01.10