반응형
C++ 프로그램이 실행될 때 메모리는 크게 네 가지 영역으로 나뉩니다.
- 코드 영역(Code Segment): 함수의 코드가 저장됩니다.
- 데이터 영역(Data Segment): 전역/정적 변수들이 저장됩니다.
- 힙 영역(Heap Segment): 동적 할당된 데이터가 저장됩니다.
- 스택 영역(Stack Segment): 지역변수, 함수 호출 정보가 저장됩니다.
간단한 예제 코드
int Add(int a, int b) {
int result = a + b;
return result;
}
int main() {
int x = Add(3, 4);
return 0;
}
메모리 구조 그림 (텍스트 버전)
STACK 영역
├─ Add 함수 공간
│ ├─ return 주소 (함수 호출 뒤 돌아갈 주소)
│ ├─ 매개변수 a = 3
│ ├─ 매개변수 b = 4
│ └─ 지역변수 result
├─ main 함수 공간
│ └─ 지역변수 x = 7
HEAP 영역
└─ // 동적데이터
DATA 영역
└─ // 전역변수, staic
CODE 영역
├─ main() 함수
└─ Add() 함수
함수 호출 시 메모리 동작 흐름 (순서도)
① 프로그램 시작
↓
② 코드 영역에서 main() 함수 실행
↓
③ 스택에 main() 함수 공간 생성 (지역변수 x)
↓
④ main()에서 Add(3,4) 함수 호출
↓
⑤ 스택에 Add() 함수 공간 생성 (a, b, result, return 주소)
↓
⑥ CPU가 Add() 함수 계산
- 스택에서 a와 b 값을 레지스터로 불러옴
- CPU 레지스터에서 계산 수행 (3 + 4)
- 결과(7)를 다시 스택(result)에 저장
↓
⑦ Add 함수 종료
- return 값(7)을 CPU 레지스터에 저장
- Add() 함수 공간 제거
↓
⑧ main 함수로 복귀
- CPU 레지스터에서 결과(7)를 가져와 x에 저장
↓
⑨ 프로그램 종료
- main() 함수 공간 제거
* 정리
- 함수 자체는 코드 영역에 존재하며, 실제 데이터를 저장하지 않습니다.
- 지역 변수는 스택에 저장됩니다.
- 계산은 CPU 내부의 레지스터에서 이루어지고, 계산 결과는 다시 스택에 저장됩니다.
- = 연산자는 메모리에 따로 저장되는 게 아니라, 컴파일 시 메모리에 값을 저장하라는 명령으로 변환됩니다.
간략한 예시 (메모리에 값 저장되는 방식)
int x = 7; // int는 4바이트
메모리에 실제 저장되는 모습 (주소는 예시):
주소 0x0012FF60: 07
주소 0x0012FF61: 00
주소 0x0012FF62: 00
주소 0x0012FF63: 00
즉, x는 주소(0x0012FF60)를 의미하며, int이므로 해당 주소부터 4바이트 공간에 7이라는 값이 이진수로 저장됩니다.
반응형
'C++ > 기본' 카테고리의 다른 글
| [C++] 33. 추상 팩토리 패턴 (0) | 2025.03.29 |
|---|---|
| [C++] 32. Factory Method (0) | 2025.03.29 |
| [C++] 31. Builder (0) | 2025.03.29 |
| [C++] 30. 행동패턴 (0) | 2025.03.29 |
| [C++] 29. 구조패턴 (0) | 2025.03.29 |