C++
[C++] 스택 오버플로우
쿼카만지고싶어요
2024. 12. 18. 20:20
스택 오버플로우란
- 스택 오버플로우란 스택 메모리 영역이 초과되는 현상을 의미합니다. 스택은 OS마다 고정된 크기의 메모리가 할당됩니다. 할당된 메모리 보다 큰 메모리가 들어오면 스택영역에서 오버플로우가 발생하게 됩니다.
스택 오버플로우의 원인
1. 재귀함수가 너무 많이 호출될때
- 재귀함수를 너무 많이 호출하거나, 탈출 조건을 명시하지 않으면 스택 오버플로우가 발생합니다.
2. 지역변수가 클때
- int k[백만]인 지역변수가 있고 할당된 크기가 1MB면, 4MB의 메모리 공간이 필요함으로 오버플로우가 발생하게 됩니다.
3. 여러 함수를 순차적으로 실행하며 함수 호출이 깊어질때
스택 오버플로우의 증상
1. 프로그램 크래쉬 - 프로그램이 갑자기 종료됩니다.
2. Segmentation Fault - 잘못된 메모리 접근으로 프로그램이 중단됩니다.
3. Access Violation - 잘못된 메모리 위치에 접근할때 발생하는 오류입니다. 해당 오류가 발생합니다.
스택 오버플로우의 방지
1. 재귀함수 사용할때 호출 너무 많지 않게 탈출 조건 잘 걸어두기
2. 너무 큰 지역변수면 힙 메모리 공간에 할당 후 사용하기
3. 꼭 많은 스택 메모리를 사용해야 하면 수동으로 스택 메모리 설정하기