2009-09-02 3 views
2

많은 상속과 많은 객체 생성 등을 이유로 스택을 "오버플로"하는 GNU g ++로 명령 줄 프로그램을 작성하고 컴파일했습니다. 링크 할 때 맥 OS X에서이 해결 방법은 문제를 해결하기 위해 :gnu g ++을 사용하는 Windows에서 스택 제한에 대한 해결 방법

-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000 

는 리눅스에서, 난 그냥 ulimit -s unlimited을 시도; 이 방법으로 프로그램을 실행하는 GNU g ++로 Windows에서 컴파일 할 때, 컴파일러가 인식하지 않는

더 그러나 세그먼트 오류를 ​​제공하지 않습니다 당신이로 사용하는 다른 어떤 옵션

-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000 

문제 해결 방법은 무엇입니까? 사전

+2

나는 "남자 다운 깊은 유산"이이 문제의 일부가 될지 모르겠다. . . –

답변

5

-Wl,--stack,somelargesize에서

덕분에 당신이 계신 것 같습니다. 그러나 큰 할당을 위해 힙을 대신 사용하도록 코드를 리팩토링하는 것이 좋습니다. 주소 공간은 한정된 리소스이며 "해결 방법"은 상당히 큰 부분을 요구합니다.

+0

음, 힙 역시 주소 공간을 사용합니다 ... –

+0

@Andy :하지만 크기는 고정 된 2Mb로 기본 설정되어 있지 않으며 자신의 응용 프로그램을 적합하게 만들기 위해 256Mb를 앞에서 요구할 필요가 없습니다. C 라이브러리는 그를 위해 큰 할당을 관리하는 데 꽤 좋습니다. – moonshadow

1

This page 당신이 다음 명령 줄 옵션 (-fno-스택 제한 검색) 시도 할 수도 있음을 시사한다 : 그 자체에 실패하면

-fno-stack-limit 

을 다음 this other page도 추가 제안 :

-fstack-check 
+0

안녕하세요! IDE DEV-C++ (유혈 사태)로이 옵션을 시도했지만 여전히 스택 오버플로가 발생합니다. 힌트는 무엇입니까? – flow

+0

이 답변은 잘못되었습니다. 이 옵션은 "스택이 특정 값 이상으로 커지지 않도록하는 코드를 생성합니다."; 스택이 너무 커지면 프로그램이 실패하게하는 검사 일뿐입니다. –

관련 문제