실행중인 프로그램은 운영체제로부터 메모리 공간을 할당받는데, 프로그램이 실행 중인 동안 사용되는 메모리는 일반적으로 세 가지 주요 영역으로 나뉨
: 데이터, 스택, 힙. 각 영역에는 다음과 같은 형태의 변수나 데이터가 할당됨.
간단히 말해 데이터 영역은 전역 변수와 정적 변수를 저장하고, 스택 영역은 함수 호출 관련 데이터를 저장하며, 힙 영역은 동적으로 할당된 변수와 데이터를 저장함. 이러한 영역은 각각의 역할을 수행하여 프로그램의 메모리 사용을 관리하고, 변수 및 데이터의 수명을 결정함.
1. 데이터(Data) 영역:
- 전역 변수(Global Variables): 프로그램 전체에서 접근 가능한 변수로, 초기화된 데이터를 저장. 이러한 변수는 프로그램이 시작될 때 메모리에 할당되고 프로그램이 종료될 때까지 유지됨.
- 정적 변수(Static Variables): 함수 내부에서 선언되지만, 프로그램이 실행될 때 메모리에 할당되며 함수가 호출될 때 변수 값이 초기화됨. 함수가 종료되더라도 메모리에 남아있는 특성을 가짐.
#include <iostream>
// 전역 변수 (global variable)
// globalVar는 프로그램 전체에서 접근 가능하며 초기화된 데이터를 저장
int globalVar = 10;
int main() {
// 정적 변수 (static variable)
// staticVar는 main 함수 내에서 선언되었지만 프로그램이 시작될 때 메모리에 할당되며, 프로그램이 종료될 때까지 유지됨
static int staticVar = 5;
std::cout << "전역 변수: " << globalVar << std::endl;
std::cout << "정적 변수: " << staticVar << std::endl;
return 0;
}
2. 스택(Stack) 영역
- 지역 변수(Local Variables): 함수 내부에서 선언되며 함수가 호출될 때 메모리에 할당됨. 함수가 종료되면 해당 변수도 소멸됨. 스택은 함수 호출과 관련된 데이터 및 함수의 호출 및 복귀 정보를 저장하는 데 사용됨.
#include <iostream>
int add(int a, int b) {
int result = a + b; // 지역 변수 (local variable)
return result;
// add의 지역변수 ; 함수가 호출될 때 메모리에 할당되고 함수가 종료될 때 소멸
}
int main() {
int x = 5; // 지역 변수 (local variable)
int y = 3; // 지역 변수 (local variable)
// main의 지역변수 ; 함수가 호출될 때 메모리에 할당되고 함수가 종료될 때 소멸
int sum = add(x, y); // add 함수 호출
std::cout << "합계: " << sum << std::endl;
return 0;
}
3. 힙(Heap) 영역:
- 동적 할당된 변수(Dynamically Allocated Variables): 프로그램 실행 중에 필요한 메모리를 동적으로 할당하고 해제하는 데 사용됨. 이러한 변수는 개발자가 메모리 할당 및 해제를 관리해야 함. 예를 들어, new (C++) 또는 malloc (C) 함수로 메모리를 할당하고 delete (C++) 또는 free (C) 함수로 메모리를 해제함.
#include <iostream>
int main() {
int* dynamicVar = new int; // 동적 할당된 변수 (dynamically allocated variable)
*dynamicVar = 7;
std::cout << "동적 할당된 변수: " << *dynamicVar << std::endl;
delete dynamicVar; // 메모리 해제
return 0;
// 프로그램 실행 중에 메모리를 할당하고 new 연산자를 사용하여 초기화함
// 이 변수는 개발자가 명시적으로 메모리를 해제해야 하며, delete 연산자를 사용하여 메모리를 해제함
}
'개발 > c++' 카테고리의 다른 글
[c++] 인라인 함수의 효용 (3) | 2023.09.04 |
---|---|
[c++] Call by value vs Call by reference (0) | 2023.09.03 |
[c++ 프로그래밍 입문] 5-2. 함수와 배열&구조체&포인터 (0) | 2023.08.30 |
[c++ 프로그래밍 입문] 5-1. 함수의 기초 (0) | 2023.08.30 |
[c++ 프로그래밍 입문] 4. Branch Syntax (분기 구문, 조건문) (1) | 2023.08.23 |