[C++] 메모리 구조
메모리 구조(프로세스 영역, RAM 구조)

코드 영역 (code)
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. (Read-Only)
데이터 영역 (=공용 영역, data)
- 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.
힙 영역 (heap)
- 위(메모리의 낮은 주소)에서 아래(메모리의 높은 주소)로 데이터가 쌓인다.
- 낮은 주소에서부터 높은 주소로 주소값이 채워지다가 스택영역을 침범하면 Heap Overflow가 발생한다.
- 힙 영역은 사용자가 직접 관리할 수 있고, 관리해야만 하는 메모리 영역이다.
- 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
스택 영역 (stack)
- 아래(메모리의 높은 주소)에서 위(메모리의 낮은 주소)로 데이터가 쌓인다.
- 높은 주소에서부터 낮은 주소로 주소값이 채워지다가 Heap 영역을 침범하면 스택오버플로우(Stack Overflow)가 발생한다.
- 스택영역은 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역이다.
- 함수의 호출과 함께 할당되고, 함수의 호출이 완료되면 소멸한다.
- 이렇게 스택영역에 저장되는 함수의 호출정보를 스택프레임(stack frame)이라고 한다.
스택 오버플로우 (Stack Overflow)
스택 오버플로우는 프로그램에서 스택 메모리 영역의 용량을 초과하여 데이터를 쓰려고 할 때 발생하는 오류이다.
발생 상황
1. 재귀 호출이 너무 많아서 스택 영역이 가득 찬 경우
2. 함수에서 너무 많은 양의 지역 변수를 선언한 경우
해결 방안
1. 재귀 호출로 인해 스택오버플로우가 발생했다면, 재귀 함수의 종료 조건을 확인하여 함수가 정상적으로 종료될 수 있도록 정의한다.
2. 많은 양의 지역 변수로 인해 스택오버플로우가 발생했다면, 지역 변수의 크기를 줄이거나, 동적 메모리 할당을 통해 스택 영역이 아닌 힙 영역에 메모리가 할당되도록 한다.
3. 컴파일러나 운영체제에 따라 스택의 크기를 조절할 수 있지만, 다른 종류의 오류를 유발할 수 있어 주의해야 한다.
http://www.tcpschool.com/c/c_memory_structure
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com