메모리 구조

2023. 11. 10. 01:15·[게임 개발] CS 공부

메모리 구조에 대한 설명

프로그램이 실행되기 위해서는 먼저 메모리 공간이 할당되어야 하는데요!

프로그램이 실제로 CPU에서 실행되기 전에 메모리 공간이 먼저 할당되고, 그 이후 프로그램이 실행됩니다.

 

이를 위해서 OS는 메모리(RAM)에 공간을 할당해 주는데,

이 메모리 공간은 크게 네 부분으로 구성되어 프로그램의 다양한 요소를 저장합니다.

 


코드 영역

코드 영역은 텍스트 영역이라고도 불리며, 이 영역은 실행할 프로그램의 코드가 저장되는 영역입니다.

(코드 영역에 저장되는 코드는 컴파일러에 의해 컴파일된 소스코드의 기계어 코드입니다!)

 

코드 영역 내에는 다음과 같은 내용이 주로 저장됩니다.

함수 : 코드 내에 작성된 함수와 메서드

상수 : 코드 내에 직접 입력된 정수, 실수, 문자열 등의 리터럴 값

제어문 : 반복문이나 조건문, 분기문과 같이 프로그램의 흐름을 제어할 때 사용하는 실행문

실행 도중 코드가 변경되지 않도록 읽기 전용으로 지정되어 있습니다.


데이터 영역

  • 데이터 영역은 전역 변수와 static 변수가 할당되는 영역입니다.

  • 프로그램의 실행시, 함수 호출 전에 할당되고 프로그램이 종료되어야 소멸되기 때문에
    프로그램 종료시 까지 지워지지 않을 데이터를 저장합니다.

  • 실행 도중 전역변수가 변경될 수 있어서 읽기,쓰기 전용으로 지정되어 있습니다.

힙 영역

  • 개발자가 직접 할당/해제 하는 메모리 공간 입니다.
    - 이 공간에 메모리 할당하는 것을 동적할당 이라고도 부릅니다.

  • 런타임에 크기가 결정됩니다.
    - 컴파일 과정을 마친 프로그램이 사용자에 의해 실행되고, 이러한 응용 프로그램이 동작되는 시점을
    런타임 이라고 부릅니다.

  • 메모리가 낮은 주소에서 높은 주소 방향으로 할당되기 때문에 선입선출(FIFO) 방식으로 작동됩니다.

스택 영역

  • 프로그램이 자동으로 할당/해제하는 임시 메모리 영역입니다.
    - 함수 호출 시 생성되는 지역변수와 매개변수가 저장되고, 함수 호출이 완료되면 사라집니다.

  • 컴파일 타임에 크기가 결정됩니다.
    - 즉, 프로그램이 컴파일 되는 시점에 해당 메모리의 크기가 정해집니다.

  • 메모리는 높은 주소에서 낮은 주소 방향으로 할당되며, 후입선출(LIFO) 방식으로 작동됩니다.

힙과 스택 영역

힙 영역과 스택 영역은 사실 같은 공간을 공유하고 있습니다.

하나의 공간을 두고 힙 영역은 위에서 아래로, 스택 영역은 아래에서 위로 할당됩니다.

 

이 때, 서로의 메모리 영역을 침범하게 되는 것을 각각 힙 오버플로우, 스택 오버플로우 라고 합니다.
때문에 힙과 스택 영역의 크기는 서로 반비례 하게 됩니다.


저작자표시 (새창열림)

'[게임 개발] CS 공부' 카테고리의 다른 글

OOP의 5대 원칙  (0) 2023.11.08
프로세스와 스레드  (0) 2023.11.07
'[게임 개발] CS 공부' 카테고리의 다른 글
  • OOP의 5대 원칙
  • 프로세스와 스레드
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      그리디
      브루트포스
      프로세스
      투포인터
      dp
      context switching
      역참조
      메모리구조
      슬라이딩 윈도우
      dfs
      참조자
      누적합
      우선순위 큐
      데드락
      스레드
      해시
      문자열
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    메모리 구조
    상단으로

    티스토리툴바