본문 바로가기
cs

메모리의 4대 영역

by ilp 2025. 3. 2.
반응형

목차

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


1. 코드(Code) 영역

  • 프로그램의 실행 코드(기계어 명령어)가 저장되는 영역
  • 주로 읽기 전용(read-only)으로 설정 되어 있어,
    실행 중인 프로그램이 코드를 수정하는 것을 방지한다.
  • 프로그램이 시작될 때 메모리에 로드되고 프로그램이 종료될 때까지 유지된다.

특징

  • 읽기 전용: 대부분의 코드 영역은 일기 전용이고 실행중인 프로그램이 자신을 바꿀 수 없다.
  • 정적 할당: 프로그램이 시작될 때 크기와 내용이 결정되고 변경되지 않는다.

2. 데이터(Data) 영역

  • 전역 변수(global variables), 정적변수(static variables), 상수(constant data)가 저장되는 메모리 영역이다.
  • 프로그램이 시작될 떄 할당 되서 종료될 떄 까지 유지된다.

특징

  • 정적 데이터: 전역 변수와 정적 변수가 저장된다.
  • 초기화된 데이터: 초기값이 있는 데이터는 데이터 영역의 초기화 된 부분에 저장된다.
  • 초기화 되지 않은 데이터: BSS(Block Started by Symbol)에 저장되며 기본값(주로 0)으로 초기화 된다.

 

3. 힙(Heep) 영역

  • 동적 메모리 할당(dynamic memory allocation)에 사용되는 메모리 영역이다.
    프로그래머가 원하는 형태대로 쓸 수 있는 공간이다.
  • 'malloc', 'calloc', realloc' 등으로 받고 'free'로 해제한다.

특징

  • 동적할당: 사용자가 할당하고, 소멸시킬 수 있다.
  • 유연성: 프로그램 실행 중 크기를 변경할 수 있다.
  • 메모리 누수 위험: 할당된 메모리는 자동으로 소멸 되지 않아 메모리 누수가 발생 할 수 있다.

4. 스택(Stack) 영역

  • 지역변수, 매개변수가 저장되는 메모리 영역이다.
    함수 호출 시 스택 프레임(stack frame)이 생성되고, 종료되면 없어진다.
  • 아주 잠깐 사용하고 삭제할 데이터의 저장공간으로 쓰인다.
    LIFO(Last In, First Out)구조를 따른다.

특징

  • 자동 할당, 해제: 호출시 자동으로 할당 되고, 종료시 자동으로 해제 된다.
  • 빠른 접근: 메모리 접근 속도가 빠르다.
  • 제한된 크기: 스택은 크기가 제한되어, 메모리를 너무 많이 쓰면 스택 오버플로우가 발생할 수 있다.

 

 

참고

https://iloveprogramming.tistory.com/146

 

[Dream hack] Background: Linux Memory Layout

강의 내용서론세그먼트코드 세그먼트데이터 세그먼트BSS 세그먼트스택 세그먼트힙 세그먼트서론메모리 오염(Memory Corruption)cpu의 동작과 메모리 사이에 밀접한 연관이 있음을 의미한다.만약 공

iloveprogramming.tistory.com


반응형