루리코딩 세상

메모리 영역 : Windows 기준 본문

이론/C++

메모리 영역 : Windows 기준

루리딩 2025. 5. 12. 17:52

Windows 기준 프로그램 실행 시 메모리 할당 영역은 아래와 같은 순서로 구성된다.

메모리 주소 기준으로 낮은 곳에서 높은 곳으로 정렬되며, 대체로 다음과 같이 배치되는 특성을 갖음.

 

[낮은 주소] ↓  
─────────────────────────────  
1. **코드 영역 (Text Segment)**  
   - 실행 코드(함수, 기계어 등)가 저장  
   - 컴파일된 바이너리의 `.text` 섹션  
   - 읽기 전용  

2. **데이터 영역 (Data Segment)**  
   - 초기화된 전역변수/정적변수 (`int g = 3;`) 

https://velog.io/@eigenkyeong/Background-%EC%9C%88%EB%8F%84%EC%9A%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0


   - 읽기/쓰기 가능  

3. **BSS 영역 (Block Started by Symbol)**  
   - 초기화되지 않은 전역변수/정적변수 (`int g;`)  
   - 런타임에 0으로 초기화됨  

4. **힙 (Heap)**  
   - `new`, `malloc()` 등으로 동적 할당  
   - 크기가 유동적, 수동 해제 필요 (`delete`, `free`)  
   - 높은 주소 방향으로 증가  

5. **스택 (Stack)**  
   - 함수 호출 시 지역변수, 리턴주소, 매개변수 저장  
   - 함수 호출마다 Push/Pop  
   - 힙과 반대 방향인 **낮은 주소**로 성장  
─────────────────────────────  
[높은 주소] ↑


 

┌───────────────┐
│     Stack     │ ← 함수 호출 시마다 위쪽으로 내려감
├───────────────┤
│     Heap      │ ← new, malloc 등으로 위쪽으로 자람
├───────────────┤
│ BSS Segment   │ ← 초기화 안된 전역/static 변수
├───────────────┤
│ Data Segment  │ ← 초기화된 전역/static 변수
├───────────────┤
│ Code Segment  │ ← 함수, 명령어 등
└───────────────┘


'이론 > C++' 카테고리의 다른 글

스택 프레임 (Stack frame)  (0) 2025.05.14
Factory  (0) 2025.05.14
C++ 동적배열, 정적배열  (0) 2025.05.12
C++ 스택 오버 플로우 (Stack Overflow)  (0) 2025.05.12
C++ 콘텐츠 : 포인터  (0) 2025.05.12