|
스택은 함수가 한번 호출될 때마다 사용되고 함수가 종료되면 돌려주므로, 따라서 함수 갯수가 많은 것도 당연히 Stack
Overflow가 발생하고 안하고에 영향을 많이 줍니다. 그런데...
C++빌더에서 스택의 기본 크기는 1메가바이트입니다.
이것은 프로젝트 옵션의 링커 페이지를 보시면 지정할 수 있게 되어 있습니다.
1메가바이트라는 양은 절대로 적은 양이 아닙니다. 보통 프로그램은 이 양의 몇십분의 일도 쓰지 않습니다.
함수가 한번 호출되는 데에 스택은 기본적으로 기껏해야 몇십 바이트밖에 사용되지 않습니다.
분명히 아셔야 할 것은, 보통은 Stack Overflow가 생긴다면 로직상에 문제가 있는 것입니다.
그리고 함수를 세개 호출하면 Stack Overflow가 발생하지 않고 네개 호출하면 발생한다면, 세개인 경우라도 데이터가
더 많이 들어오거나 해서 조건이 다른 경우가 되면 얼마든지 발생할 수 있다는 겁니다.
만약 확실히 더 복잡한 조건이 되지 않는다는 전제조건이 있다면, 위에서 말한 프로젝트 옵션의 링커 페이지에서 더 많이
늘려주거나, 혹은 재귀호출을 하는 함수 내에서 지역 변수를 최대한 적게 쓰거나 하는 방식으로 피해갈 수는 있습니다.
하지만 먼저 로직을 재점검하는 것이 최우선이라고 생각됩니다.
Stack Overflow가 발생할 정도로 엄청나게 많은 횟수로 재귀호출이 일어난다면 로직이 좀 의심스럽습니다.
그럼...
이용태 님이 쓰신 글 :
: 재귀호출을 해대고 있는데요...
:
: a재귀함수
: {
: 함수1
: 함수2
: 함수3
: 함수4
: }
:
: 이렇게 되어져 있습니다.
:
: 여기서 a 재귀함수에서 함수 4개를 포함시켜서 프로그램을 돌리면 Stack Overflow가 납니다
:
: 그런데.. 함수 3개로해서 프로그램 돌리면 Stack Overflow가 발생하지 않습니다.
:
: a 재귀함수는 조건이 맞을때까지.. 계속 실행이 되는데요.. 몇번실행되지는지는 정확히 모르겠구요.. 암튼 상당히 많이 실행이 됩니다.
:
: 이런 경우 어떻게 해결을 해야 합니까??
:
: 함수3개는 되고.. 함수4개는 안된다.. 조금 이상한 듯합니다..;;;
|