📚 C++ 메모리 구조: 스택 vs 힙
🔸 스택 메모리 (Stack Memory)
구조와 동작
- 함수 단위로 스택 프레임이 생성됨
- 함수 호출 시 스택에 쌓이고, 함수 종료 시 자동으로 제거됨
- 지역 변수, 매개 변수, 반환 주소, this 포인터(필요시)등이 포함됨
특징
- 객체가 스택에 할당될 때는 멤버 변수 공간만 할당됨
- 멤버 함수는 코드 영역에 저장되어 모든 객체가 같은 함수 주소를 공유함
🔸 힙 메모리 (Heap Memory)
C++에서의 사용법
- malloc, calloc 함수 사용 금지함 (객체 생성 불가능)
- new/delete 연산자를 사용함
- delete를 안 하면 메모리 누수가 발생함
메모리 누수 방지법
- 스마트 포인터 사용을 권장함
- 배열의 경우 vector 컨테이너를 사용함
⚖️ 성능 및 특성 비교
| 구분 | 스택 | 힙 |
|---|
| 할당/해제 속도 | 빠름 (top에서만 작업) | 느림 (복잡한 관리 필요) |
| 메모리 크기 | 제한적 (stack overflow 위험) | 큰 메모리 할당 가능 |
| 할당 방식 | 정적 할당 | 동적 할당 |
| 생명주기 | 함수 스코프에 의존 | 프로그래머가 직접 관리 |
💡 힙 메모리의 장점
힙 메모리는 다음 세 가지 주요 문제를 해결함
1. Life Cycle - 함수 스코프를 벗어나도 데이터 유지함
2. Large Size - 스택 오버플로우 없이 대용량 데이터 처리함
3. Dynamic Allocation - 런타임에 필요한 만큼 메모리 할당함
< 참고 자료 >
코드없는 프로그래밍
힙 메모리에 대한 모든 것