Computer_science/Memory

[메모리] 메모리 구조

neck392 2024. 12. 7. 23:25

프로그램을 메모리에 로드할 때 메모리의 구조는 아래와 같다.

<메모리 구조>

 

ROM

코드 영역(텍스트 영역)

  • 프로그램의 명령어 코드가 저장되는 영역
  • CPU는 이 영역의 명령어를 읽어 프로그램을 실행
  • 실행 중에 크기가 변하거나 수정되지 않으며 컴파일된 기계어 코드가 저장
  • 변조 될 경우 Segment Fault가 발생(커널을 참조 및 변조할 경우와 동일한 오류)

데이터 영역

프로그램이 사용하는 전역 변수(Global Variables)와 정적 변수(Static Variables)가 저장

  • 초기화된 데이터 (Initialized Data)
    • 초기값이 있는 전역/정적 변수 저장
    • int a = 10;
  • 초기화되지 않은 데이터 (Uninitialized Data, BSS)
    • 초기값이 없는 전역/정적 변수 저장
    • static int b;

RAM

 스택 영역은 프로그램 로직이 동작하기 위한 인자(Argument)와 프로세스 상태를 저장하는데 사용되고, 힙 영역은 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데 사용된다.

 

힙 영역

 

  • 동적 메모리 할당이 이루어지는 공간(프로그램이 실행되기 전까지 알 수 없는 가변적인 양의 데이터를 저장하기 위해 예약된 메인 메모리 영역)
  • 런타임 중에 malloc(C), new(C++)와 같은 함수로 메모리를 요청하면 힙 영역에 할당
  • 메모리 사용이 끝나면 반드시 헤제해야 하며 크기는 실해 중에 유동적으로 변

 

 

스택 영역

 

  • 지역 변수, 함수 호출 정보, 리턴 주소 등이 저장되는 공간(인자와 프로세스 상태를 저)
  • 함수가 호출될 때 메모리가 스택에 푸시(Push) 되고, 함수가 종료되면 팝(Pop) 되면서 메모리가 해제

 

 

env (Environment Variables)

  • 환경 변수를 저장하는 공간
  • 프로그램 실행 환경에 대한 정보(예: 현재 경로, 시스템 설정 등)를 포함
  • 환경 변수는 프로세스가 외부 환경과 상호작용할 때 사용

argv (Argument Vector), argc(Argument Count)

  • **명령 줄 인자(Command Line Arguments)**를 저장하는 공간입니다.
  • 사용자가 프로그램 실행 시 전달한 인자들을 저장합니다.
  • argc는 전달된 인자의 개수를 나타내고, argv는 인자를 저장하는 문자열 배열

Reference

  • Harvey M. Deitel, Paul J. Deitel, and David R. Choffnes, Operating Systems, 3rd ed., Pearson, 2003.
  • Hyun-Hoe Koo, Operating System: Principles and Structure Illustrated, 1st ed., Hanbit Academy, 2016. (7th printing, 2022).
  • Dae-Il Yang, Introduction to Information Security, 4th ed., Hanbit Academy, 2021. (5th printing, 2024).