>백엔드 개발 >C++ >C 프로그램의 메모리 레이아웃

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

WBOY
WBOY앞으로
2023-08-26 22:29:111274검색

C 프로그램의 메모리 레이아웃은 아래와 같습니다. 레벨이 거의 없습니다.

  • Stack Segment
  • Heap Segment
  • Text Segment
  • Data Segment

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

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

Sr.No 섹션 및 설명
1 Stack

프로세스 스택에는 메서드/함수 매개 변수, 반환 주소 및 지역 변수와 같은 임시 데이터가 포함됩니다. 자동 변수와 함수 매개변수에 할당되는 메모리 영역이다. 또한 함수 호출을 실행할 때 반환 주소를 저장합니다. 스택은 LIFO(후입선출) 메커니즘을 사용하여 로컬 또는 자동 변수, 함수 매개변수를 저장하고 다음 주소 또는 반환 주소를 저장합니다. 반환 주소는 함수 실행이 완료된 후 반환되는 주소를 의미합니다. 이 세그먼트의 크기는 지역 변수, 함수 매개변수 및 함수 호출에 따라 달라집니다. 세그먼트는 높은 주소에서 낮은 주소로 증가합니다.

2 Heap

프로세스가 실행되는 동안 동적으로 할당되는 메모리입니다. 이는 동적 메모리 저장(예: malloc() 및 calloc() 호출)을 위해 할당된 메모리 영역입니다. 세그먼트 크기는 사용자 할당에 따라 달라집니다. 세그먼트는 낮은 주소에서 높은 주소로 증가합니다.

이제 몇 가지 예제 프로그램에서 세그먼트(데이터 및 BSS 세그먼트) 크기가 어떻게 변경되는지 확인해 보겠습니다. 세그먼트 크기는 "size" 명령을 실행하여 얻을 수 있습니다.

3 Text

여기에는 프로그램 카운터 값과 프로세서 레지스터 내용으로 표시되는 현재 활동이 포함됩니다. .text 부분으로 표시됩니다. 이는 명령 코드가 저장되는 메모리 영역을 정의합니다. 이곳 역시 고정된 지역이다.

4 Data

이 섹션에는 전역 변수와 정적 변수가 포함되어 있습니다. .data 섹션과 .bss로 표시됩니다. .data 섹션은 프로그램에 대한 데이터 요소가 저장되는 메모리 영역을 선언하는 데 사용됩니다. 데이터 요소가 선언되면 이 섹션은 확장될 수 없으며 프로그램 전체에서 정적으로 유지됩니다.

.bss 섹션은 프로그램에서 나중에 선언되는 데이터 버퍼를 포함하는 정적 메모리 섹션이기도 합니다. 이 버퍼 메모리는 0으로 채워져 있습니다.

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

Sr.No 섹션 및 설명 1 초기화 데이터 세그먼트

객체 파일 또는 프로그램 가상 주소 공간의 일부로 초기화되지 않은 정적 변수와 전역 변수로 구성됩니다. 변수 구성. 초기화되지 않은 데이터 세그먼트는 BSS(Block Started by Symbol) 세그먼트라고도 합니다.

2 Un - 초기화 데이터 세그먼트

변수 값이 런타임에 변경될 수 있으므로 읽기-쓰기입니다. 세그먼트의 크기도 고정되어 있습니다.

위 내용은 C 프로그램의 메모리 레이아웃의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제