2009-10-18 24 views
1

我聲明並初始化一個數組[100] [1000] [1000] char元素(100MB),它沒有說第一次堆棧溢出。但是當我運行它過了一會兒會拋出一個堆棧溢出異常!我在項目選項 - > linker-> system中增加了-Stack Reserve Size-至200,000,000,但它沒有奏效!我正在使用2GB Ram。如何避免堆棧溢出。C++堆棧溢出 - 視覺工作室2008

回答

8

停止使用堆棧!使用堆內存!

+3

同意。 100MB的堆棧非常荒謬。我以爲我使用多個頁面不好... – asveikau 2009-10-18 04:06:56

+1

使用「Free Store」而不是使用Heap – 2009-10-18 04:50:36

1

是否有你需要分配堆棧內存的原因?這可能是您的算法中的一個缺陷 - 不是編譯器的缺陷。

0

默認堆棧大小不是鏈接器選項,而是通過許多深奧的平臺特定機制進行控制。

在窗口上,當您調用CreateThread時,可以控制它。 在Unix上也有這樣做的pthread attr機制。

在非線程代碼中,在Unix上有ulimit設置來控制這個設置,但是它們可以被平臺限制所限制。例如,在AIX中,32位進程堆棧和堆在第二段中一起增長,因此兩者的最大值都爲256Mb(一旦命中,就有很多樂趣)。

可能有平臺機制可以用來控制這個(如ulimit),但建議使用堆可能是謹慎的。