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

2021-07-12 06:03:55 字數 567 閱讀 8926

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

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

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

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

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

作業系統中有記錄空閒記憶體位址的鍊錶,申請時,尋找第乙個空間大於申請空間的堆

vs2010 32位:2g

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

另來自:

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

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

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

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

堆記憶體和棧記憶體的管理

1 堆記憶體 堆記憶體是由程式設計師手工管理的,但它的申請是需要借助標準庫函式。在大小上,理論上是物理記憶體的大小。關於堆記憶體的資料儲存是靠程式設計師來管理的。由於是由程式設計師管理的,程式設計師的錯誤操作也導致記憶體的洩露和記憶體碎片的問題。關於堆記憶體的標準庫函式 stdlib.h mallo...

記憶體堆和棧的區別

在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...

記憶體堆和棧的區別

原文 在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看...