이번에는 메모리 구조에 대해 살펴보려고 합니다.
보시는 바와 같이 Memory는 stack, heap, data, text(code) section으로 나뉘어지는 것을 확인할 수 있습니다.
그럼 이를 더 자세히 살펴보도록 하겠습니다.
실행할 프로그램의 Code가 저장되어 있는 영역.
프로그램의 시작 단계에서 할당되는 영역, 프로그램 종료 시 사라진다.
ex) 전역 변수, 정적 변수
사용자에 의해 메모리 공간이 동적으로 할당되고 반환된다.
ex) Malloc (C에서의 동적 메모리 할당)
함수의 호출과 함께 할당되는 구간으로, 함수 종료 시 반환된다.
ex) return 주소, 함수의 parameter, 지역 변수
다음 소스코드를 살펴보는 것으로 각 section에 어떤식으로 할당 되는지 알아보겠습니다.
#include <stdio.h>
int a = 10;
int add(int number) {
a = a + number;
}
void main() {
int b = 10;
static int c = 20; =
int *p = malloc(1000);
add(100);
printf("%d\n", a);
return 0;
}
여기서 각각의 변수들에 대해 앞에서 살펴본 section으로 나누어 보겠다.
Stack section : number, b, p
Data section : a, c
heap section : malloc