2009-11-02 39 views
2

在Windows(或其他任何操作系統)中,什麼決定了我可以使用多少堆棧?這個網站的名稱讓我認爲可能會用完堆棧,所以我應該避免將大量數據放在堆棧上?什麼限制我在內存方面使用堆棧?

回答

2

它是語言特定的,編譯器特定的,也可能是操作系統特定的,但是你應該把大量的數據放在堆上而不是放在堆棧上。

Other SO post about this

有辦法改變堆棧大小 - 但我不會亂用吧!

如果你想使用試驗和錯誤知道你的堆棧大小 - 只是在棧上創建一個數組,看看它有多少可以讓你...

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

相關問題