메모리 할당 영역
메모리 영역
단순히 무언가를 저장하고, 주소를 가지는 것만이 아닌, 영역 별로 여러가지 일을 한다.
메모리 영역의 종류에는 다음과 같은 것들이 있다.
- Code 영역
- Data 영역
- BSS 영역
- Heap 영역
- Stack 영역
영역은 Code -> Data -> BSS -> Heap -> Stack 순서이며, 주소 값은 낮은 값에서 부터 높은 값으로 부여된다.
각 영역은 크게 정적 메모리 영역과 동적 메모리 영역 2가지로 분류 할 수 있다.

정적 메모리 영역
파일의 사이즈와 관계되어 있음
Code 영역
- 함수 / 상수 저장 (컴파일 단계에서 검사 후, Code 영역에 저장됨)
- 제어문 저장
- 프로그램의 코드를 저장
Data 영역
- 초기화 된 전역 / 정적 변수 저장 (직접 초기화를 하지 않아도 자동 초기화가 되지만, 해주는 것이 가장 좋음)
BSS 영역
- 초기화 되지 않은, 초기화가 0으로 된 전역 / 정적 변수 저장
- 초기화 되지 않은 배열 저장
- 초기화가 Null로 된 포인터 저장
동적 메모리 영역
Stack 영역
- 지역 / 매개 변수 저장
- 컴파일에 걸리는 시간 결정
Heap 영역
- 동적 할당 된 변수 저장
- 프로그래머가 유일하게 직접 관리할 수 있는 공간
예문
int num = 1; //Data
int count; //BSS
char* str; //BSS
const int i = 10; //Data
int main()
{ //Stack 생성
int a, k = 1; //Stack
char* ptr; //Stack
ptr = malloc(12); //Heap
static int b; //BSS
static int c = 2; //Data
c = a + b; //Code
k = 3; //Code
func(c, k); //Stack
return 0;
} //Stack 소멸
void func(int temp1, int temp2) //Stack
{
}