進程空間分配和堆棧大小

1. Linux中進程空間的分配狀況以下:windows

  從上圖能夠看出,進程的空間分配:與進程相關的數據結構(頁表、內核棧、task) ---> 物理內存 ---> 內核代碼和數據  --->  用戶棧  ---> 共享庫的內存映射區 ---> 運行時堆 --->未初始化數據段.bss --->  已初始化數據段.data  --->  代碼段.text數據結構

2. 進程的堆棧大小:spa

  •  32位Windows,一個進程棧的默認大小是1M,在vs的編譯屬性能夠修改程序運行時進程的棧大小。
  •  Linux下進程棧的默認大小是10M,能夠經過 ulimit -s查看並修改默認棧大小。
  •  默認一個線程要預留1M左右的棧大小,因此進程中有N個線程時,Windows下大概有N*M的棧大小。
  •  堆的大小理論上大概等於進程虛擬空間大小-內核虛擬內存大小。windows下,進程的高位2G留給內核,低位2G留給用戶,因此進程堆的大小小於2G。Linux下,進程的高位1G留給內核,低位3G留給用戶,因此進程堆大小小於3G

3. 進程的最大線程數:線程

  •  32位windows下,一個進程空間4G,內核佔2G,留給用戶只有2G,一個線程默認棧是1M,因此一個進程最大開2048個線程。固然內存不會徹底拿來作線程的棧,因此最大線程數實際值要小於2048,大概2000個。
  •  32位Linux下,一個進程空間4G,內核佔1G,用戶留3G,一個線程默認8M,因此最多380個左右線程。ps:ulimit -a 查看電腦的最大進程數,大概7000多個)
相關文章
相關標籤/搜索