목록
- 코드 영역
- 데이터 영역
- 힙 영역
- 스택 영역
프로그램이 실행되는 동안 사용되는 메모리의 구조에 대해 알아보겠습니다. 프로그램이 실행되면 운영체제는 해당 프로그램을 위한 메모리 공간을 할당하게 됩니다. 이 메모리 공간은 주로 코드, 데이터, 힙, 스택 영역으로 나뉘어집니다.
1. 코드(Code) 영역
코드 영역은 프로그램의 실행 코드가 저장되는 곳입니다. CPU가 직접 실행하는 명령어들이 이곳에 위치하며, 프로그램의 명령어들이 메모리에 로드되어 실행됩니다. 코드 영역은 실행 중에 수정되지 않으며, 읽기 전용으로 사용됩니다.
프로그램이 종료될 때 까지 남아있습니다.
2. 데이터(Data) 영역
데이터 영역은 전역 변수와 정적 변수들이 저장되는 곳입니다. 프로그램 시작 시 할당되고 프로그램 종료 시 해제되는 데이터들이 위치합니다. 이 영역에 저장된 데이터는 초기값을 가지거나 초기화되지 않은 경우 0으로 초기화됩니다.
// 데이터 영역의 전역 변수 예시
int global_variable = 10;
int main() {
// 데이터 영역의 정적 변수 예시
static int static_variable = 20;
return 0;
}
3. 힙(Heap) 영역
힙 영역은 동적으로 할당된 메모리가 저장되는 곳입니다. 프로그램 실행 중에 필요에 의해 메모리를 동적으로 할당하고 해제할 수 있습니다. 주로 사용자가 직접 메모리를 관리해야 하는 경우에 활용됩니다. 힙은 선입선출(FIFO) 구조를 가지고 있습니다.
// 힙 영역의 동적 메모리 할당과 해제 예시
int* dynamic_array = (int*)malloc(5 * sizeof(int));
// 동적으로 할당된 메모리 사용
free(dynamic_array); // 메모리 해제
4. 스택(Stack) 영역
스택 영역은 함수 호출 시 지역 변수와 함수의 호출 정보가 저장되는 곳입니다. 함수가 호출될 때마다 스택에 새로운 프레임이 생성되고, 함수의 실행이 끝나면 해당 프레임이 제거됩니다. 스택은 후입선출(LIFO) 구조를 가지고 있습니다.
// 스택 영역의 함수 호출과 지역 변수 예시
void exampleFunction(int num) {
int local_variable = 30; // 지역 변수
int result = local_variable + num;
// 함수 실행
}
int main() {
exampleFunction(); // 함수 호출
return 0;
}
메모리의 이 구조는 프로그램이 안정적으로 동작하고 효율적으로 자원을 활용할 수 있도록 도와줍니다. 각 영역은 특정 목적에 따라 데이터를 저장하고 관리하며, 이를 이해하면 프로그램의 동작 원리를 더 잘 이해할 수 있습니다.
참고