C++ 프로그램이 실행될 때, 메모리는 여러 영역으로 나뉘며, 각각의 역할이 다르다.
메모리 영역을 제대로 이해하면 변수의 수명과 동작 방식을 더 잘 파악할 수 있다.
코드(Code) 영역
역할:
- 실행할 **프로그램의 기계어 코드(명령어)**가 저장되는 영역
- 함수 코드, 실행 코드 등이 저장됨
- 수정할 수 없는 읽기 전용(Read-Only) 메모리
void Hello() { cout << "Hello World!"; }
데이터(Data) 영역
역할:
- 전역 변수, 정적 변수(static), 상수(const) 등이 저장됨
- 프로그램 실행 시작부터 종료까지 유지됨
int globalVar = 10; // 전역 변수 → 데이터 영역
static int staticVar = 20; // 정적 변수 → 데이터 영역
const int CONST_VAL = 100; // 상수 → 데이터 영역
힙(Heap) 영역
역할:
- new 연산자로 할당되는 동적 메모리가 저장됨
- 사용자가 직접 delete 해야 함 (안 하면 메모리 누수 발생)
int* ptr = new int(30); // 동적 할당 → 힙 영역
delete ptr; // 메모리 해제
스택(Stack) 영역
역할:
- 함수 호출 시 생성되는 지역 변수, 매개변수가 저장됨
- 함수가 끝나면 자동으로 해제됨 (LIFO 구조)
void func()
{
int localVar = 50; // 지역 변수 → 스택 영역
}
요약
메모리 영역 | 저장 | 특징 |
코드 영역 | 실행 코드(기계어) | 읽기 전용, 함수 코드 저장 |
데이터 영역 | 전역 변수, static, const | 프로그램 실행 동안 유지 |
힙 영역 | new로 할당된 메모리 | 직접 delete 해야 함 |
스택 영 | 지역 변수, 함수 호출 정보 | 함수 종료 시 자동 해제 |
'공부 > C++' 카테고리의 다른 글
C++ Class (0) | 2025.03.07 |
---|---|
C++ 포인터와 레퍼런스 (0) | 2025.03.07 |
C++ 함수에 대한 이해와 메모리 구조 (0) | 2025.03.07 |
변수의 선언과 초기화 & 메모리 할당 과정 (0) | 2025.03.05 |
기본 - 컴파일러 (0) | 2025.03.05 |