1. 程式人生 > >棧和堆最大可以申請的記憶體數

棧和堆最大可以申請的記憶體數

棧:一個棧對應一個執行緒

        有限制,VS2010中,預設的棧空間大小為1M(64位和32位系統),可通過CreatThread引數列表改變執行緒的StackSize;

        最大支援執行緒數 = 記憶體/StackSize

堆:與64位/32位有關,與編譯器有關,受限於計算機系統中有效的虛擬記憶體;

       理論上,32位系統,堆記憶體可以達到4G的空間,但是堆最大也沒有4G,因為整個程序的映像空間有一部分被對映給作業系統,另外棧也佔據了一部分,全域性,靜態變數再佔據一部分,還有其他程式碼資料佔據一部分.

      作業系統中有記錄空閒記憶體地址的連結串列,申請時,尋找第一個空間大於申請空間的堆

      VS2010 32位:2G

                     64位:128G(虛擬記憶體16TB)【C++ 64位下最多4G,C的malloc無限制】

另來自:http://bbs.csdn.net/topics/300107271

Win32在正常情況下,4G記憶體裡有2G分配給使用者程序,有2G給系統用.

使用者程序的東西像堆,棧,CODE等等都是在2G使用者空間裡的.

使用者可分配的記憶體總量一般有近2G,

但單獨一個可分配的記憶體塊的大小通常不可能達到這個數量級,系統會根據當前程序的地址使用情況來決定.