📌 프로세스의 메모리 구조
- 운영체제는 프로세스에 적절한 메모리를 할당하는데 다음 구조를 기반으로 할당함
⭐ 스택
- 지역변수, 매개변수, 함수가 저장됨
- 컴파일 시에 크기가 결정됨
- 재귀함수 등에 따라 런타임시에도 크기가 변경됨
- 동적할당
⭐ 힙
⭐ 데이터영역
⭐ 코드영역
✅ 정적할당
- 컴파일단계에서 메모리를 할당
BSS segment
에는 전역변수, static으로 선언되어 있는 변수 중 0으로 초기화 또는 초기화가 되어있지 않은 변수들이 할당됨
public class Main {
static int a;
static int b = 0;
int c;
int d = 0;
public static void main(String[] args) {
}
}
Data Segment
에는 전역변수, static으로 선언되어 있는 변수 중 0이 아닌값으로 초기화된 변수들이 할당됨
public class Main {
static int a = 3;
int c = 1;
public static void main(String[] args) {
}
}
text segment
에는 프로그램의 코드가 들어감
✅ 동적할당
- 런타임 단계에서 메모리를 할당 받는 것
- Stack과 Heap으로 나뉨
Stack
은 지역변수, 매개변수, 함수에 의해 늘어나거나 줄어드는 메모리 영역
- 함수가 호출될때마다 stack에 계속해서 저장됨
Heap
은 동적으로 할당되는 변수들을 저장
- malloc( ), free( ) 함수를 통해 관리하며, 동적으로 관리되는 자료구조도 Heap영역을 사용