ComputerScience/프로세스와 스레드

프로세스의 메모리 구조

dev_swan 2023. 11. 20. 20:00

✏️ 프로세스의 메모리 구조

운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당합니다.

프로세스의 메모리 구조 - https://yoosioff.oopy.io

위에서부터 코드 영역(Code Segment), 데이터 영역(BSS Segment, Data Segment), 힙(Heap), 스택(Stack)으로 나눠집니다.

 

코드 영역

코드 영역은 프로그램에 내장되어 있는 소스 코드가 들어가는 영역입니다. 이 영역은 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 가집니다.

 

데이터 영역

데이터 영역은 프로세스의 메모리 구조 중에서 전역변수와 정적변수가 저장되는 부분입니다. 이 영역의 변수들은 프로그램의 실행 중에 계속해서 값을 유지하며, 프로그램이 종료될 때까지 그 값이 사라지지 않습니다. 데이터 영역은 BSS 영역과 Data 영역으로 나뉩니다.

 

BSS 영역에는 초기화되지 않은 정적 변수와 전역 변수가 저장되며, 프로그램이 실행될 때 0으로 초기화됩니다. 반면, Data 영역에는 초기값을 갖는 전역 변수와 정적 변수가 저장됩니다.

 

힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정됩니다. 예를 들어 벡터 같은 동적 배열은 당연히 힙에 동적 할당됩니다. 힙은 동적인 특징을 가집니다.

 

스택

스택은 함수의 실행 컨텍스트(지역 변수, 반환 주소, 매개변수 등)가 저장되는 메모리 영역입니다.

 

스택은 실행 시간에 크기가 동적으로 변화하며, 함수 호출이 이루어질 때마다 해당 함수의 프레임이 스택에 추가되고, 함수가 종료되면 스택에서 제거됩니다. 스택과 힙은 각각의 방향으로 성장하며, 이 두 영역이 만나게 되면 메모리 관련 오류가 발생할 수 있습니다.