當我嘗試在C程序中初始化一個大小爲300 * 300 * 4的3D數組時,我的程序停止運行並報告堆棧溢出錯誤。我使用的系統有3GB RAM,應該足夠。有沒有辦法增加分配給程序的內存?我在Windows Vista上使用Dev C++。如何增加程序的內存分配
回答
可以使用malloc()
/free()
(或new[]
/delete[]
用於C++),也可以是全局數組或局部靜態數組。如果你嘗試在一個函數中創建一個非靜態數組,它將被分配到堆棧上,而堆棧通常不會很大。
你也可以嘗試向後初始化數組;一些操作系統在頁面錯誤發生時動態地增加堆棧,並且由於在x86上堆棧的數量增長向下,向後初始化可以提供幫助。
您需要增加程序可以使用多少堆棧空間。
您可以在屬性下對話框中的最大堆棧大小「鏈接|系統|堆棧保留大小」
即使你有3 GB的RAM,堆棧大小是由操作系統的限制,通常是很小,因爲像這樣的大型結構可能分配在堆上,而不是堆疊。
既然您使用C++,maybe you could use Boost?
boost::multi_array<int, 3> x (boost::extents[300][300][4]);
由於您使用的是DevC++,可能您正在使用gcc編譯器並通過它使用ld鏈接器。鏈接器有一個選項-stack stacksize
,它允許您控制分配給堆棧的內存量。你將如何去從DevC++做這件事我不知道。
我也不知道爲什麼有人會使用DevC++ - 它是越野車,不再被開發。你應該考慮改用更好的IDE - Code::Blocks剛剛發佈了一個新的主要版本,在各方面都優於DevC++,並且配備了更現代化的C++編譯器。
完全@您的第二段。 (雖然,出於類似的原因,我不知道爲什麼任何人仍然會使用Windows Vista;) – Artelius 2010-06-12 08:37:12
- 1. 如何增加nCache的內存分配
- 2. 增加分配給應用程序的內存
- 3. 在內存分配分析過程中內存分配不斷增加
- 4. 增加Cygwin的內存分配
- 5. 分配的內存不斷增加
- 6. 增加分配給jdk的內存
- 7. 分配的內存增長
- 8. 程序如何分配大量內存?
- 9. 繼續增加內存分配
- 10. 程序集內存分配
- 11. 程序內存分配
- 12. 內存分配問題後,增加內存限制
- 13. 如何增加JVM內存?
- 14. 如何增加jvm內存
- 15. MPI程序中的內存分配
- 16. 如何爲不斷增長的Eigen預先分配內存:: MatrixXd
- 17. 進程的內存分配
- 18. 如何fmt.Println()內存不是由go程序分配的?
- 19. WordPress的抄本分配給PHP增加內存 - 問題
- 20. NSUserDefault在分配上的同步增加了內存。
- 21. 當爲程序分配內存時?
- 22. NSMutableData如何分配內存?
- 23. 如何增加內存流的容量?
- 24. 如何增加Ant'Javadoc'任務的內存?
- 25. 如何增加phpmyadmin的內存大小
- 26. 如何記錄程序中每次分配和釋放內存?
- 27. 運行此Java應用程序時,非分頁內核內存瘋狂增加
- 28. HTTPNetStreamInfo :: _ readStreamClientCallBack(__ CFReadStream *,unsigned long)增加內存分配
- 29. 從gcc分配內存或增加閾值防止std ::函數
- 30. neo4j'Java堆空間'錯誤 - 增加內存分配失敗時
或者'std :: vector(300 * 300 * 4)'或者'boost :: array ,300>,4>'來建議一些C++解決方案。 –
MSalters
2010-06-14 12:32:31