메모리 구조

코드(Code) 영역
- 실행 파일이 저장되는 영역으로, 코드와 상수가 저장된다. 읽기 전용이며 실행 시간 동안 변경되지 않는다.
- CPU가 코드 영역의 명령어들을 순차적으로 가져와 실행한다.
데이터(Data) 영역
- 데이터 영역은 전역 변수와 정적(static) 변수가 저장되는 영역이다.
- 프로그램이 시작될 때 할당되어 프로그램이 종료될 때까지 유지된다.
스택(Stack) 영역
- 스택 영역은 함수의 호출과 관련된 지역 변수와 매개변수가 저장되는 영역이다.
- 함수가 종료되면 자동으로 정리되는 임시 메모리 공간이다.
- 주로 함수의 매개변수를 전달하는 용도로 사용된다.
<aside>
<img src="/icons/light-bulb_yellow.svg" alt="/icons/light-bulb_yellow.svg" width="40px" />
스택 오버플로우

- 스택 메모리가 할당된 크기를 초과하여 사용하려고 할 때 발생하는 오류이다.
- 주로 재귀 함수가 너무 깊게 호출되거나, 지역 변수가 너무 많이 선언될 때 발생할 수 있다.
</aside>
힙(Heap) 영역
- 사용자가 직접 메모리를 할당하고 해제할 수 있는 자유로운 메모리 영역이다.
- 프로그램 실행 중에 동적으로 할당되며, 명시적으로 해제하지 않으면 메모리 누수가 발생할 수 있다.
- C++은 기본적으로 C 런타임 라이브러리의 힙 관리자를 통해 힙 영역을 관리한다.
- 필요한 경우, API를 통해 직접 힙을 생성하고 관리할 수도 있다.
<aside>
<img src="/icons/light-bulb_yellow.svg" alt="/icons/light-bulb_yellow.svg" width="40px" />
힙 오버플로우

- 힙 메모리 영역을 초과하여 메모리를 할당하거나 접근할 때 발생하는 오류이다.
- 동적 할당된 메모리의 경계를 넘어서 데이터를 쓰거나 읽으려고 할 때 발생할 수 있다.
- 버퍼 오버플로우의 한 종류로, 보안 취약점으로 악용될 수 있어 주의가 필요하다.
</aside>
메모리 누수

- 메모리를 할당만 하고 해제하지 않아 발생하는 문제이다.
- 프로그램이 실행되는 동안 사용하지 않는 메모리가 계속 남아있어 메모리 자원이 낭비된다.
- 장시간 실행되는 프로그램에서 메모리 누수가 지속되면 시스템 성능이 저하되거나 프로그램이 비정상 종료될 수 있다.