Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 프로그램의 메모리 레이아웃

<시간/>

C 프로그램의 메모리 레이아웃은 다음과 같습니다. 몇 가지 수준이 있습니다. 이들은 -

  • 스택 세그먼트
  • 힙 세그먼트
  • 텍스트 세그먼트
  • 데이터 세그먼트

C 프로그램의 메모리 레이아웃

이제 이 섹션의 기능이 무엇인지 살펴보겠습니다.

Sr.No 섹션 및 설명
1 스택
프로세스 스택에는 메서드/함수 매개변수, 반환 주소 및 지역 변수와 같은 임시 데이터가 포함됩니다. 자동 변수 및 함수 매개변수에 할당된 메모리 영역입니다. 또한 함수 호출을 실행하는 동안 반환 주소를 저장합니다. 스택은 로컬 또는 자동 변수, 함수 매개변수를 저장하고 다음 주소 또는 반환 주소를 저장하기 위해 LIFO(Last-In-First-Out) 메커니즘을 사용합니다. 리턴 주소는 함수 실행이 완료된 후 리턴할 주소를 의미합니다. 이 세그먼트 크기는 지역 변수, 함수 매개변수 및 함수 호출에 따라 가변적입니다. 이 세그먼트는 상위 주소에서 하위 주소로 커집니다.
2
이것은 런타임 동안 프로세스에 동적으로 할당된 메모리입니다. 이것은 malloc() 및 calloc() 호출과 같은 동적 메모리 저장을 위해 할당된 메모리 영역입니다. 이 세그먼트 크기는 사용자 할당에 따라 다양합니다. 이 세그먼트는 낮은 주소에서 높은 주소로 커집니다.
이제 몇 가지 샘플 프로그램에서 세그먼트(데이터 및 bss 세그먼트) 크기가 어떻게 달라지는지 확인하겠습니다. 세그먼트 크기는 "크기" 명령을 실행하여 알 수 있습니다.
3 텍스트
여기에는 프로그램 카운터 값과 프로세서 레지스터의 내용으로 표시되는 현재 활동이 포함됩니다. .text 섹션으로 표시됩니다. 이것은 명령어 코드를 저장하는 메모리 영역을 정의합니다. 이 또한 고정된 영역입니다.
4 데이터
이 섹션에는 전역 및 정적 변수가 포함되어 있습니다. .data 섹션과 .bss로 표시됩니다. .data 섹션은 프로그램에 대한 데이터 요소가 저장되는 메모리 영역을 선언하는 데 사용됩니다. 이 섹션은 데이터 요소가 선언된 후에 확장할 수 없으며 프로그램 전체에서 정적 상태로 유지됩니다.
.bss 섹션은 프로그램에서 나중에 선언될 데이터에 대한 버퍼를 포함하는 정적 메모리 섹션이기도 합니다. 이 버퍼 메모리는 0으로 채워집니다.

데이터 세그먼트는 두 부분으로 더 나눌 수 있습니다.

Sr.No 섹션 및 설명
1 초기화된 데이터 세그먼트
이것은 초기화되지 않은 정적 및 전역 변수로 구성된 개체 파일 또는 프로그램의 가상 주소 공간의 일부입니다. 초기화되지 않은 데이터 세그먼트는 BSS(Block Started by Symbol) 세그먼트라고도 합니다.
2 초기화되지 않은 데이터 세그먼트
변수 값이 런타임 중에 변경될 수 있기 때문에 이것은 읽기-쓰기입니다. 이 세그먼트에도 고정된 크기가 있습니다.