1. 프로세스 구조
Stack 영역
- 함수 호출 시 생성되는 지역 변수, 매개변수, 반환 주소 등의 임시 데이터를 저장하는 공간입니다.
- 함수 호출과 함께 생성되고 함수가 반환되면 해제됩니다.
- 컴파일 시점에 최대 크기가 결정되지만, 실제 사용량은 런타임에 따라 동적으로 변합니다.
Heap 영역
- 동적으로 할당되는 데이터를 저장하는 공간입니다.
- 사용자에 의해 동적으로 메모리가 할당됩니다.
- 런타임 시점에 크기가 동적으로 할당되고 해제됩니다.
Data 영역
- 전역 변수와 정적(static) 변수가 저장되는 곳입니다.
- Data 영역의 크기는 정적이지만, 내부에 저장된 변수들의 값은 실행 중에 변할 수 있습니다.
- 더 세분화하면 초기화된 데이터는 데이터 영역에, 초기화되지 않은 데이터는 BSS 영역에 저장됩니다.
Code 영역
- 실행할 프로그램의 코드가 저장되는 영역입니다.
- CPU는 이 영역의 명령어를 순차적으로 가져와 처리합니다.
- 컴파일 시점에 크기가 결정됩니다.
프로세스 메모리 구조에서 Stack, Data, Code 영역의 메모리 크기는 컴파일 시 결정되고, Heap 영역의 메모리 크기는 런타임 시 동적으로 할당됩니다.
Stack과 Heap 영역은 동적 메모리 할당이 가능해 두영역 사이에 빈 메모리 공간이 존재하는데, 이 영역은 서로 침범할 수 있습니다.
이로 인해 스택 오버플로우(스택이 힙을 침범)나 힙 오버플로우(힙이 스택을 침범)가 발생할 수 있습니다.
💡 (참고) 스택, 힙 오버플로우
Stack Overflow: 주로 재귀 호출이 과도하게 발생하거나 지나치게 큰 지역 변수가 할당될 때 발생
Heap Overflow: 동적 메모리 할당이 과도하게 이루어져 사용 가능한 메모리 공간을 초과할 때 발생
2. 프로세스 특징
- 프로세스는 완전히 독립적인 수행단위라서, 하나의 프로세스에서 발생한 문제는 다른 프로세스에게 영향을 주지 않습니다.
- 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근이 불가합니다.
- 이러한 독립성 때문에 프로세스 간 통신을 위해서는 IPC(Inter Process Communication)가 사용됩니다.
ref.
완전히 정복하는 프로세스 vs 스레드 개념