프로그램을 수행하기 위해서는 메모리 공간이 운영체제(Operating system)에 의해 코드 영역, 데이터 영역, 힙 영역, 스택 영역 이렇게 4개의 영역으로 구분되어 사용된다. 이렇게 변수의 특성에 따라 4개로 구분된 메모리 공간 안에서 한 영역에 변수가 선언되고, 문자열 등이 선언되어 사용된다.
코드 영역 : 프로그램의 코드가 저장되는 메모리 공간이다. 컴퓨터는 코드 영역에 저장된 명령문을 하나씩 가져가서 실행한다.
데이터 영역 : 데이터 영역에는 전역 변수와 스택 변수가 할당된다. 프로그램의 시작과 동시에 메모리 공간에 할당되어 프로그램이 종료될 때까지 남아 있다.
힙 영역 : 데이터 영역과 스택 영역에 할당되는 변수는 생성과 소멸 시점이 결정되어 있다. 개발자가 원하는 시점에 변수를 할당하고 소멸할 수 있는 변수들이 할당되는 영역이 힙 영역이다. malloc() 함수와 free() 함수를 이용한 동적 메모리 할당 영역이다.
스택 영역 : 지역 변수와 매개 변수가 할당된다. 할당되는 변수들은 선언된 함수를 빠져나가면 소멸한다.
이렇게 네 가지 영역으로 나누어 변수의 특성에 따라 할당되어 사용하는 이유가 무엇일까?
메모리의 특성에 따라 4개의 영역으로 나누어, 특성이 같은 변수끼리 하나의 영역에 저장하면 메모리 관리에 있어 효율적이다. 즉, 메모리 공간을 나누어서 관리하면 유사한 성격의 데이터를 모아서 저장할 수 있어 관리가 편할 뿐 아니라 메모리 접근 속도도 빨라진다.
int x = 10; // 전역 변수
main()
{
int a = 1; // 지역 변수
func(a);
a++; // 지역 변수a가 증가
func(a);
} // 지역 변수 a 스택 영역에서 제거, 전역 변수 x 데이터 영역에서 제거
void func(int n)
{
int b = 5; // 지역 변수
} // 매개 변수 n, 지역 변수 b 스택 영역에서 제거
이러한 코드가 있을 때, 각 변수들이 있는 영역은 다음과 같다.
데이터 영역 | x |
힙 영역 | |
스택 영역 | a, n, b |
참고
- 모두의 C언어 책
'C, C++ > C, C++' 카테고리의 다른 글
[C++] '\n' 과 endl 차이 (0) | 2022.03.02 |
---|---|
[C++] C++ 언어의 특징 (0) | 2022.03.02 |
[C] C언어에서 음수를 표현하는 방법 (0) | 2022.01.07 |
컴파일(Compile) 과정 (0) | 2022.01.05 |
[C] 모두의 C언어 복습&정리 (2) (0) | 2022.01.03 |