메모리 구조

David8·2022년 2월 18일
1

메모리 구조

목록 보기
1/1
post-thumbnail

메모리 구조

<목차>

1. 코드 영역

2. 데이터 영역

3. 스택 영역

4. 힙 영역

1. 코드 영역

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

  • 프로그램이 시작하고 종료될 때까지 메모리에 남아 있음
  • CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리함

2. 데이터 영역

프로그램 전역 변수와 정적 변수, 문자열 상수가 저장되는 영역

  • 프로그램이 시작하고 끝날 때까지 메모리에 계속 남아있음

3. 스택 영역

함수의 호출 시 지역 변수와 매개변수가 저장되는 영역

  • 함수 호출 시 할당되며 함수가 완료되면 소멸함
  • 프로그램이 자동으로 사용하는 임시 메모리 영역
  • 메모리의 높은 주소 --> 낮은 주소의 방향으로 할당됨

4. 힙 영역

사용자가 직접 관리할 수 있는 영역

  • 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨
  • 메모리 낮은 주소 --> 높은 주소 방향으로 할당됨
  • malloc() 또는 new 연산자 통해 할당, free() 또는 delete 연산자 통해서 해제 가능

5. Stack vs Heap

stack 영역이 커질 수록 heap 영역이 작아지고, heap 영역이 커질 수록 stack 영역이 작아진다.

  • 속도
  1. 스택이 훨씬 빠름
    1. 스택: 이미 할당되어 있는 공간을 사용
    2. 힙: 사용자가 따로 할당해서 사용하는 공간
    3. 다만 스택은 공간이 매우 적기 때문에 모든 응용에서 스택을 사용할 수는 없음
  • 오버플로우
  1. stack의 지역 변수는 사용되고 소멸되기 때문에 용량에 불확실성을 가짐 --> 따라서 stack 영역의 주소값은 밑에서 부터 채워지고, heap 영역은 위에서 부터 채워 내려감 ==> 두 메모리의 주소가 겹치게 되면 Overflow가 발생함
    • stack overflow
      stack 영역이 heap 영역를 침범하는 경우
    • heap overflow
      heap 영역이 stack 영역을 침범하는 경우

0개의 댓글