2010-06-12 82 views
5

當我嘗試在C程序中初始化一個大小爲300 * 300 * 4的3D數組時,我的程序停止運行並報告堆棧溢出錯誤。我使用的系統有3GB RAM,應該足夠。有沒有辦法增加分配給程序的內存?我在Windows Vista上使用Dev C++。如何增加程序的內存分配

回答

11

可以使用malloc()/free()(或new[]/delete[]用於C++),也可以是全局數組或局部靜態數組。如果你嘗試在一個函數中創建一個非靜態數組,它將被分配到堆棧上,而堆棧通常不會很大。

你也可以嘗試向後初始化數組;一些操作系統在頁面錯誤發生時動態地增加堆棧,並且由於在x86上堆棧的數量增長向下,向後初始化可以提供幫助。

+1

或者'std :: vector (300 * 300 * 4)'或者'boost :: array ,300>,4>'來建議一些C++解決方案。 – MSalters 2010-06-14 12:32:31

3

您需要增加程序可以使用多少堆棧空間。

您可以在屬性下對話框中的最大堆棧大小「鏈接|系統|堆棧保留大小」

2

即使你有3 GB的RAM,堆棧大小是由操作系統的限制,通常是很小,因爲像這樣的大型結構可能分配在堆上,而不是堆疊。

既然您使用C++,maybe you could use Boost

boost::multi_array<int, 3> x (boost::extents[300][300][4]); 
2

由於您使用的是DevC++,可能您正在使用gcc編譯器並通過它使用ld鏈接器。鏈接器有一個選項-stack stacksize,它允許您控制分配給堆棧的內存量。你將如何去從DevC++做這件事我不知道。

我也不知道爲什麼有人會使用DevC++ - 它是越野車,不再被開發。你應該考慮改用更好的IDE - Code::Blocks剛剛發佈了一個新的主要版本,在各方面都優於DevC++,並且配備了更現代化的C++編譯器。

+1

完全@您的第二段。 (雖然,出於類似的原因,我不知道爲什麼任何人仍然會使用Windows Vista;) – Artelius 2010-06-12 08:37:12