C언어의 메모리 구성은 크게 4가지로 나누어집니다.
구분 | 설명 |
---|---|
코드 영역 (Code Area) |
코드 영역은 이름 그대로 실행할 프로그램 코드가 저장되는 메모리 공간입니다. CPU는 코드영역에 저장된 명령문들을 하나씩 가져가서 실행합니다. |
데이터 영역 (Data Area) |
전역변수와 static 변수가 할당되는 공간입니다. 이 영역의 변수들은 프로그램의 시작과 동시에 메모리 공간에 할당되며 프로그램 종료시 까지 남아있는 특징을 가집니다. |
힙 영역 (Heap Area) |
데이터 영역과 스택영역에 할당되는 변수들은 생성과 소멸 시점이 이미 결정되어 있습니다. 힙 영역은 프로그램 실행중에 프로그래머가 원하는 시점에 변수를 할당하고, 소멸하는 공간입니다. |
스택 영역 (Stack Area) |
지역변수와 매개변수가 할당되는 공간입니다. 이 영역의 할당되는 변수들은 선언된 함수가 종료되면 소멸되는 특징이 있습니다. |
스택은 지역변수를 설명하며 이미 살펴 보았습니다.
다음 소스를 보고 프로그램 종료시까지 메모리의 변화를 생각해보세요.
#include <stdio.h>
void func2(int n);
void func1(int n);
int num;
int main(void) {
int num1 = 20;
func1(num1);
return 0;
}
void func2(int n) {
int num3 = n + 1;
}
void func1(int n) {
int num2 = n + 1;
func2(num2);
}
다음 소스를 보고 무엇이 문제인지 생각해 보세요.
#include <stdio.h>
char* getStr(void);
int main(void) {
char* str1;
char* str2;
str1 = getStr();
printf("name1 : %s\n", str1);
str2 = getStr();
printf("name2 : %s\n", str2);
return 0;
}
char* getStr(void) {
char str[30];
printf("문자열을 입력하세요 : ");
scanf("%s", str);
return str;
}