파파비의 블로그

C#) 스택메모리, 스택오버플로우, 재귀호출 본문

개발/c#

C#) 스택메모리, 스택오버플로우, 재귀호출

N. Dave 2020. 5. 23. 14:36
반응형

C#에서는 메모리구조로 스택과 힙을 사용한다.

그 중에서 스택에 대해 얘기해보려고 한다.

 

스택은 하나의 쓰레드가 실행될 때 해당 쓰레드에 1MB의 메모리가 할당된다.

스택의 역할은 메서드의 실행, 메서드로 전달하는 인자, 메서드 내에서 사용되는 지역변수 등을 처리 한다.

메소드들도 스택에 의해 관리되는데, 메소드의 끝을 알리는 } 를 만났을 때, 해당 메소드와 관련된

모든 데이터들은 스택에서 해제된다.

 

1MB가 작게 느껴질 수 있는데, 사실은 상당히 넉넉한 양이다.

 

그런데 하나의 메소드에서 필요한 저장공간이 1MB를 넘어서게 되면 에러가 생기며 프로그램이 중단된다.

이를 스택오버플로우라고 부른다.

스택오버플로우의 특이한 점은, 어떤 에러라는 정보가 제공되지 않는다는 점이다.

스택에 에러 관련 내용이 저장되어 전달되어야하지만 스택이 애초에 꽉 차버렸기 때문에 그게 안된다.

그래서 스택오버플로우가 발생하면 제대로 원인을 찾기 힘들기도 하다.

 

그런데 스택오버플로우는 주로 재귀호출에 의한 가능성일 확률이 높다.

재귀호출은 함수가 다시 함수를 부르는 형태로 대표적으로 팩토리얼 함수가 있다.

 

 

반응형
Comments