在Windows(或其他任何操作系統)中,什麼決定了我可以使用多少堆棧?這個網站的名稱讓我認爲可能會用完堆棧,所以我應該避免將大量數據放在堆棧上?什麼限制我在內存方面使用堆棧?
2
A
回答
2
它是語言特定的,編譯器特定的,也可能是操作系統特定的,但是你應該把大量的數據放在堆上而不是放在堆棧上。
有辦法改變堆棧大小 - 但我不會亂用吧!
如果你想使用試驗和錯誤知道你的堆棧大小 - 只是在棧上創建一個數組,看看它有多少可以讓你...
1
它完全OS具體和可配置的,在Linux上,您可以檢查並通過shell中的ulimit調用進行更改。
取決於你所說的大,我現在的Debians標準堆棧大小是8兆,這足夠大到有1兆大的數組例如。
3
在Win32上,默認堆棧大小爲1MB,可以在調用CreateThread()和編譯器設置時進行調整。
0
操作系統會設置一個上限,但您可以使用鏈接程序設置特定的限制,該鏈接程序通常具有特定的默認值,通常比操作系統允許的值要低。
1
可以
Project->Properties->Linker->System
下設置在Visual Studio應用程序的堆棧大小,但不建議AA編程技術,它相當簡單檢索的空閒堆棧空間量:
CONTEXT Context;
memset(&Context, 0, sizeof(Context));
RtlCaptureContext(&Context);
long stackFree = Context.Rsp;
1
在Windows上,對於Visual Studio中的本機C/C++項目,初始/主線程的堆棧大小使用鏈接器的/STACK
選項(IDE項目屬性中的「鏈接器/系統/堆棧保留大小」)設置,默認爲1MB 。這也是新線程的默認線程堆棧大小,沒有指定更具體的內容。
對於隨後產生的線程,_beginthread()
,_beginthreadex()
和CreateThread()
都有一個參數讓你指定堆棧大小的線程,這將默認爲,如果你在零點通過你的連接屬性中設置。詳細請參照http://msdn.microsoft.com/en-us/library/ms686774.aspx。
相關問題
- 1. .NET堆棧內存限制
- 2. 內存限制堆棧的名稱?
- 3. 爲什麼堆棧大小有限制?
- 4. Wicket,頁面堆棧和內存使用
- 5. 在JVM中,堆棧內存將佔用什麼內存空間?
- 6. g ++在堆棧上分配未使用的內存是什麼?
- 7. 如何限制使用malloc()獲取的內存而不限制堆棧?
- 8. iOS中的堆棧項目是否存在內存限制?
- 9. 堆棧在C:爲什麼我有內存泄漏?
- 10. 在PhantomJS中,函數調用堆棧限制是什麼?
- 11. 使用內存時用戶定義堆棧和內置堆棧之間的區別是什麼?
- 12. 內存分配,堆棧和堆棧
- 13. 什麼是更高效的堆棧內存或堆?
- 14. 爲什麼堆棧和堆都需要內存分配
- 15. 爲什麼內存分成堆棧和堆?
- 16. 在C#中調用堆棧限制
- 17. 在堆棧內存中存儲引用
- 18. 棧和堆內存
- 19. 關於堆棧和堆棧內存使用的問題
- 20. 在pthread中使用setstacksize函數設置堆棧大小的限制是什麼?
- 21. gcc用我的堆棧做什麼?
- 22. DevC++(Mingw)堆棧限制
- 23. 推斷一個方法的堆棧內存在Java中使用
- 24. 堆棧大小的最大使用限制是否有限制?
- 25. 我的程序,以簡化分數被打調用堆棧限制。爲什麼?
- 26. 如果大部分數據都堆在堆棧上,堆棧內存的主要重要性/作用是什麼?
- 27. 堆棧和堆棧內存存儲在C++
- 28. 爲什麼我們使用堆來存儲內存?
- 29. 什麼在堆棧中?
- 30. 是否存在調用堆棧級別限制?