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多個)