본문 바로가기
C++/기본

[C++] 메모리 영역

by 위니밍 2025. 6. 8.
반응형

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