linux的執行緒棧大小可以使用ulimit -s檢視,對於ubunt 2.6的核心執行緒棧的預設大小為8m,如下:
shine@shine-bupt:~/program/c$ ulimit -s
8192
32位的系統,虛擬記憶體空間是4g,其中1g是核心空間使用者不可見,真正可以使用的記憶體空間大小是3g,具體參加下表:
linux的記憶體模型,一般為:位址
作用 說明
>=0xc000 0000
核心虛擬儲存器
使用者**不可見區域
<0xc000 0000
stack(使用者棧)
esp指向棧頂 ↓
↑空閒記憶體
>=0x4000 0000
檔案對映區
<0x4000 0000
↑ 空閒記憶體
heap(執行時堆)
通過brk/sbrk系統呼叫擴大堆,向上增長。
.data、.bss(讀寫段)
從可執行檔案中載入
>=0x0804 8000
.init、.text、.rodata(唯讀段)
從可執行檔案中載入
<0x0804 8000
保留區域
也就是說使用者可使用的記憶體空間就是0x00000000~0xc0000000的大小,這個空間的大小剛好是3g。
那麼程序中能建立的最大執行緒數就會受預設執行緒棧的大小限制,假設執行緒數n,則n*8m < 3*1024m一定要成立。
linux多執行緒預設棧大小和最大可建立執行緒數
linux的執行緒棧大小可以使用ulimit s命令檢視,對於ubuntu 2.6的核心執行緒棧的預設大小為8m,如下 root npti ulimit s 32位的系統,虛擬記憶體空間是4g,其中高1g是核心空間使用者不可見,真正可以使用的記憶體空間大小是低3g的使用者空間,具體參考下表 linu...
windows 和 linux 多執行緒
學習了幾天多執行緒技術,做個總結,便於記憶。一般 多執行緒傳遞引數 為 void 所以會有乙個強制轉換過程 int void 等,傳遞多個引數選擇 結構體指標。為了避免多個執行緒訪問資料衝突 會有乙個 叫做 臨界區 criticalsection 類 防止讀寫資料衝突,大概流程是 critical ...
linux建立執行緒失敗的原因是執行緒棧大小的設定
執行緒應用程式最常見導致建立執行緒失敗的原因是執行緒棧大小的設定。建立乙個新的執行緒,預設情況下系統為執行緒棧預留了2mb的定址空間。執行緒棧起始於程序虛擬 記憶體的高階位址,並向虛擬記憶體底端位址方向擴充套件。取決於執行緒本身的大小以及其它執行緒記憶體分配的情況,程序虛擬位址空間消耗過快可能導致建...