Memory Layout of Programs (프로세스의 메모리 구조)

메모리구조


영역의 구분

정적할당과 동적할당을 담당하는지 여부에 따라 영역을 구분합니다. 정적할당의 경우 text segment과 bss segment, data segment가 담당하고 동적할당의 경우 stack segment과 heap segment가 담당합니다.

정적할당


정적할당이란 컴파일 단계에서 메모리를 할당하는 것입니다.

text segment(텍스트 영역)

text segment은 메모리에 올라간 실행 중인 프로그램의 영역입니다. text segment은 실행 가능한 instruction들이 들어가 있습니다. 텍스트 영역은 오작동을 막기 위해 읽기만 가능합니다.

initialized data segment(초기화 된 데이터 영역)

전역변수와 정적 변수 중에 초기화 된 변수들이 존재하는 영역을 data segment(데이터 영역)이라고 합니다. 데이터 영역은 텍스트 영역과 달리 runtime(프로그램 실행)시 동작에 따라 수정이 가능합니다.

Uninitialized Data Segment(비초기화 된 데이터 영역)

전역변수와 정적 변수 중에 0으로 초기화 된 변수 또는 어느 값으로도 초기화되지 않은 변수들이 이 메모리 영역에 할당됩니다. 해당 영역은 blocked started by symbol의 앞글자를 따서 bss 영역이라고도 합니다.

동적할당


동적할당은 런타임 단계에서 메모리를 할당받는 것입니다.

stack segment(스택 영역)

지역변수, 호출 된 함수가 저장되고 컴파일 시에 크기가 결정되는 영역입니다. 스택으로 쌓이기 때문에 LIFO 구조에 따른 순서대로 처리됩니다.

heap segment(힙 영역)

힙 영역은 동적 할 때 쓰며 프로그램 실행 시 그 크기가 결정됩니다.

참고문헌


면접을 위한 CS 전공지식노트

Memory Layout of C Programs - GeeksforGeeks