2009-10-18 4 views
1

[100] [1000] [1000] char 요소 (100MB)가있는 배열을 선언하고 초기화했지만 처음에는 스택 오버플로에 대해 말하지 않았습니다. 잠시 후 스택 오버 플로우 예외가 발생합니다! 나는 프로젝트 옵션 -> 링커 -> 시스템에서 -Stack Reserve Size-를 200,000,000으로 늘렸지만 효과가 없었습니다! 나는 2GB RAM을 사용하여 작업하고 있습니다. 어떻게 오버 플로우를 피할 수 있습니까?C++ 스택 오버플로 - Visual Studio 2008

답변

8

스택 사용을 중지하십시오! 힙 메모리를 사용하십시오!

+3

동의. 스택에 100MB는 매우 터무니 없습니다. 그리고 나는 페이지 이상을 사용하는 것이 좋지 않다고 생각했다 ... – asveikau

+1

힙을 사용하는 대신 "Free Store"를 사용하라. –

1

많은 스택 메모리를 할당해야하는 이유가 있습니까? 이것은 컴파일러의 결함이 아닌 알고리즘의 결함 일 가능성이 높습니다.

0

기본 스택 크기는 링커 옵션이 아니지만 수많은 플랫폼 플랫폼 고유 메커니즘을 통해 제어됩니다.

창에서는 CreateThread를 호출 할 때이를 제어 할 수 있습니다. Unix에서도이 작업을 수행하는 데있어 pthread attr 메커니즘이 있습니다.

스레드되지 않은 코드에서 Unix에는이를 제어하는 ​​ulimit 설정이 있지만 플랫폼 제한에 의해 제한 될 수 있습니다. 예를 들어, 32 비트 프로세스의 AIX에서 스택과 힙은 두 번째 세그먼트에서 함께 증가하므로 두 가지 모두에 최대 256MB가 있습니다.

ulimit과 같이 이것을 제어하는 ​​데 사용할 수있는 플랫폼 메커니즘이있을 수 있지만 힙을 사용하라는 제안은 현명한 판단 일 수 있습니다.