실행된 프로그램은 메모리로 로드되며,
메모리에 올라온 프로그램은 코드 섹션과 데이터섹션으로 구분된다.
코드 섹션(Code Section): 기계어 코드(program code)
데이터 섹션(Data Section): 데이터의 저장
- 전역 메모리 (Global Memory)
- 스택 메모리 (Stack Memory)
- 힙 메모리 (Heap Memory)
<단순 메모리 구조>
높은번지↓(High Address) | |
|
힙(Heap Memory)
|
|
|
| 미사용 공간(Available) |
전역(Global Memory) | |
스택(Stack Memory) | |
낮은번지↑(Low Address) | 기계어 코드(Machine Code) |
전역 메모리 (Global Memory)
전역 변수(Global Variables)와 정적 변수(Static Variables)가 저장되는 곳
프로그램 시작과 동시에 할당되고, 프로그램이 종료되어야만 메모리에서 소멸된다.
예)
int start = 0;
void main()
{
static int count = 0;
}
스택 메모리 (Stack Memory)
지역 변수(Local Variables)와 매개 변수(Parameter Variables)가 저장되는 곳
이 영역에 할당된 변수는 함수 호출이 완료되면 사라지는 특징을 가진다.
컴파일 타임에 크기가 결정된다.
예)
void main()
{
int a;
}
힙 메모리 (Heap Memory)
동적 메모리 할당을 위한 곳, (C에서는 malloc/free , C++ 에서는 new/delete)
힙 메모리의 크기는 운영체제가 정한 최대 가상 메모리 만큼이다.
런타임(프로그램 실행 시간)에 크기가 결정된다.
예)
void main()
{
char *p = (char *)malloc(1000*sizeof(char));
}