메모리는 아내와 같은 구조를 갖는다. 그리고, 각각의 변수는 특정 구조에 저장된다.
이는 각각 Code Segment, Data Segment(Initialized Data, Uninitailized data), Heap, Stack이다.
+-----------------------+
| Code Segment | <- 프로그램의 실행 코드
+-----------------------+
| Initialized Data | <- 초기화된 전역 변수와 정적 변수
+-----------------------+
| Uninitialized Data | <- 초기화되지 않은 전역 변수와 정적 변수 (BSS)
+-----------------------+
| Heap | <- 동적 메모리 할당 (위로 성장)
| |
| |
| |
+-----------------------+
| Stack | <- 함수 호출 및 지역 변수 (아래로 성장)
| |
| |
| |
+-----------------------+
global_var는 초기화된 데이터 세그먼트에 저장됨global_uninit_var는 초기화되지 않은 데이터 세그먼트 (BSS)에 저장됨local_var는 스택에 저장heap_var는 동적으로 할당된 메모리로, 힙에 저장 heap_var 자체는 스택에 저장된 포인터#include <iostream>
using namespace std;
int global_var = 50; // 초기화된 전역 변수 : Initialized Data Segment
int global_uninit_var; // 초기화되지 않은 전역 변수 : BSS
void foo() {
int local_var = 5; // 지역 변수 : Stack
int* heap_var = new int; // 동적 메모리 할당 : Heap
*heap_var = 20;
cout << "Local variable: " << local_var << endl;
cout << "Heap variable: " << *heap_var << endl;
delete heap_var; // 동적 메모리 해제
}
int main() {
foo();
return 0;
}