본문 바로가기
Software/C

[C 언어] 3. Memory Structure(메모리 구조)

by 리미와감자 2024. 9. 1.
728x90
반응형

3. Memory Structure(메모리 구조)

 

메모리 구조

  • 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드되어야 한다.
  • 운영체제는 프로그램의 실행을 위해 다양한 종류의 메모리 공간을 제공한다.
  • 코드 영역 (Code)
    • 이 영역은 실행 가능한 코드, 즉 프로그램의 명령어들이 저장된다.
    • 읽기 전용(Read Only)이며, 프로그램 실행 중에는 수정할 수 없다.
    • 컴파일된 코드가 이곳에 저장된다.
  • 데이터 영역 (Data)
    • 이 영역은 전역 변수와 static 변수들이 저장된다.
    • 초기화된 데이터와 초기화되지 않은 데이터로 나뉜다
    • 초기화된 데이터 영역 (Initialized Data Segment): 프로그램이 시작될 때 값이 할당된 전역 변수와 static 변수들이 저장된다.
    • 초기화되지 않은 데이터 영역 (BSS Segment): 프로그램이 시작될 때 값이 할당되지 않은 전역 변수와 static 변수들이 저장된다. 이 영역의 변수들은 실행 중에 0으로 초기화된다.
  • 힙 영역 (Heap)
    • 동적으로 메모리를 할당받기 위한 영역이다.
    • malloc, calloc, realloc, free와 같은 함수들을 사용하여 메모리를 할당하거나 해제할 수 있다.
  • 스택 영역 (Stack)
    • 함수 호출 시 사용하는 지역 변수와 함수 호출 정보를 저장한다.
    • 함수가 호출될 때마다 새로운 스택 프레임이 생성되며, 함수가 종료되면 해당 프레임이 삭제된다.
    • 스택은 LIFO(Last In, First Out) 구조로 되어 있으며, 함수 호출 및 복귀 시 사용된다.
    • 스택 오버플로우나 스택 언더플로우는 프로그램의 비정상 종료를 초래할 수 있다.

 

 

 

메모리 영역 크기 설정

OS 환경

  • 코드 영역 (Text Segment): 컴파일 타임에 결정되며, 프로그램 실행 중에는 변경되지 않는다.
  • 데이터 영역 (Data Segment): 링크 타임에 결정되며, 프로그램 실행 중에는 변경되지 않는다.
  • 힙 (Heap): 런타임에 동적으로 결정되며, 프로그램의 메모리 요청에 따라 유동적으로 변경된다.
  • 스택 (Stack): 프로그램 시작 시 운영 체제에 의해 설정되며, 실행 중에는 기본적으로 변경되지 않는다.

임베디드시스템/펌웨어 환경

  • 코드 영역 (Text Segment): 컴파일 타임에 결정되며, 하드웨어의 플래시 메모리나 ROM에 저장된다.
  • 데이터 영역 (Data Segment): 링크 타임에 결정되며, 메모리 맵에 직접 배치된다.
  • 힙 (Heap): 런타임에 동적으로 관리되며, 메모리 관리 코드를 통해 직접 제어한다.
  • 스택 (Stack): 프로그램 시작 시에 크기와 위치가 설정되며, 하드웨어와 소프트웨어 설계에 따라 사전 정의된다.
  • 링커 스크립트를 사용해서 메모리 섹션을 정의하고, 초기화 코드로 메모리를 초기화한다.


 

 

 

728x90
반응형

'Software > C' 카테고리의 다른 글

[C 언어] 2. Pre-process(전처리)  (0) 2024.09.01
[C 언어] 1. Introduction  (0) 2024.08.31

댓글