C 프로그램의 메모리 레이아웃은 아래와 같습니다. 레벨이 거의 없습니다.
이제 이 섹션의 기능이 무엇인지 살펴보겠습니다.
Sr.No | 섹션 및 설명 |
---|---|
1 |
Stack 프로세스 스택에는 메서드/함수 매개 변수, 반환 주소 및 지역 변수와 같은 임시 데이터가 포함됩니다. 자동 변수와 함수 매개변수에 할당되는 메모리 영역이다. 또한 함수 호출을 실행할 때 반환 주소를 저장합니다. 스택은 LIFO(후입선출) 메커니즘을 사용하여 로컬 또는 자동 변수, 함수 매개변수를 저장하고 다음 주소 또는 반환 주소를 저장합니다. 반환 주소는 함수 실행이 완료된 후 반환되는 주소를 의미합니다. 이 세그먼트의 크기는 지역 변수, 함수 매개변수 및 함수 호출에 따라 달라집니다. 세그먼트는 높은 주소에서 낮은 주소로 증가합니다. |
2 |
Heap 프로세스가 실행되는 동안 동적으로 할당되는 메모리입니다. 이는 동적 메모리 저장(예: malloc() 및 calloc() 호출)을 위해 할당된 메모리 영역입니다. 세그먼트 크기는 사용자 할당에 따라 달라집니다. 세그먼트는 낮은 주소에서 높은 주소로 증가합니다. 이제 몇 가지 예제 프로그램에서 세그먼트(데이터 및 BSS 세그먼트) 크기가 어떻게 변경되는지 확인해 보겠습니다. 세그먼트 크기는 "size" 명령을 실행하여 얻을 수 있습니다. |
3 |
Text 여기에는 프로그램 카운터 값과 프로세서 레지스터 내용으로 표시되는 현재 활동이 포함됩니다. .text 부분으로 표시됩니다. 이는 명령 코드가 저장되는 메모리 영역을 정의합니다. 이곳 역시 고정된 지역이다. |
4 |
Data 이 섹션에는 전역 변수와 정적 변수가 포함되어 있습니다. .data 섹션과 .bss로 표시됩니다. .data 섹션은 프로그램에 대한 데이터 요소가 저장되는 메모리 영역을 선언하는 데 사용됩니다. 데이터 요소가 선언되면 이 섹션은 확장될 수 없으며 프로그램 전체에서 정적으로 유지됩니다. .bss 섹션은 프로그램에서 나중에 선언되는 데이터 버퍼를 포함하는 정적 메모리 섹션이기도 합니다. 이 버퍼 메모리는 0으로 채워져 있습니다. |
데이터 세그먼트는 두 부분으로 더 나눌 수 있습니다.
객체 파일 또는 프로그램 가상 주소 공간의 일부로 초기화되지 않은 정적 변수와 전역 변수로 구성됩니다. 변수 구성. 초기화되지 않은 데이터 세그먼트는 BSS(Block Started by Symbol) 세그먼트라고도 합니다.
변수 값이 런타임에 변경될 수 있으므로 읽기-쓰기입니다. 세그먼트의 크기도 고정되어 있습니다.
위 내용은 C 프로그램의 메모리 레이아웃의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!