更新時間:2021-08-23 11:01:48 來源:動力節點 瀏覽2280次
1.Linux中進程空間的分配情況如下:
從上圖可以看出,進程的空間分配:與進程相關的數據結構(頁表、內核棧、task) ---> 物理內存 ---> 內核代碼和數據 ---> 用戶棧 ---> 共享庫的內存映射區 ---> 運行時堆 --->未初始化數據段.bss ---> 已初始化數據段.data ---> 代碼段.text
32位Windows,一個進程棧的默認大小是1M,在vs的編譯屬性可以修改程序運行時進程的棧大小。
Linux下進程棧的默認大小是10M,可以通過 ulimit -s查看并修改默認棧大小。
默認一個線程要預留1M左右的棧大小,所以進程中有N個線程時,Windows下大概有N*M的棧大小。
堆的大小理論上大概等于進程虛擬空間大小-內核虛擬內存大小。windows下,進程的高位2G留給內核,低位2G留給用戶,所以進程堆的大小小于2G。Linux下,進程的高位1G留給內核,低位3G留給用戶,所以進程堆大小小于3G。
32位windows下,一個進程空間4G,內核占2G,留給用戶只有2G,一個線程默認棧是1M,所以一個進程最大開2048個線程。當然內存不會完全拿來做線程的棧,所以最大線程數實際值要小于2048,大概2000個。
32位Linux下,一個進程空間4G,內核占1G,用戶留3G,一個線程默認8M,所以最多380個左右線程。(ps:ulimit -a 查看電腦的最大進程數,大概7000多個)
以上就是動力節點小編介紹的"進程空間分配和堆棧大小",希望對大家有幫助,想了解更多可查看Java堆棧。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習