国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux的用戶進程是如何使用內存的

2019-11-17 04:58:03
字體:
來源:轉載
供稿:網友
linux的用戶進程是如何使用內存的 Linux進程使用內存的基本流程: Linux的用戶進程是如何使用內存的(圖一)
點擊查看大圖
圖1從上圖中我們可以看出,進程的堆,并不是直接建立在Linux的內核的內存分配策略上的,而是建立在glibc的堆治理策略上的(也就是glibc的動態內存分配策略上),堆的治理是由glibc進行的。所以我們調用free對malloc得到的內存進行釋放的時候,并不是直接釋放給操作系統,而是還給了glibc的堆治理實體,而glibc會在把實際的物理內存歸還給系統的策略上做一些優化,以便優化用戶任務的動態內存分配過程。 那么glibc的堆治理器在什么時候才把物理內存歸還給系統呢?它會從堆的最大線性地址開始,從后向前計算用戶任務當前有多少空閑的堆內存(直到碰到使用中的堆內存地址為止),比如在下圖中,Linux的用戶進程是如何使用內存的(圖二)圖2它會認為有2048k的可釋放內存,只有在該值大于某個特定的threshhold時(2.3.6上為64k),它才會把這些內存歸還給系統。而在中間的“未使用”內存是不會歸還給系統的,所以系統也不可能再利用這塊物理內存頁(我們假設系統沒有swap區和swap文件),也就是說系統的內存會為此減少,除非在它之前的堆內存都用free進行釋放以后,glibc的堆治理器才有可能(只是有可能)把該段內存歸還給系統。
 由此,我們在使用malloc/free時應該小心,非凡是在初始化時分配了好多內存,但是在這之后卻再也不需要這么多的內存了,而這塊內存又沒有達到threshhold值或者在堆的最高線性地址處有某塊內存沒有釋放,但是它前面的所有堆內存都釋放了;這種情況下,用戶任務將會浪費一些物理內存,這在資源比較緊張的嵌入式系統中是不可容忍的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林西县| 时尚| 普宁市| 建阳市| 鲁甸县| 喀什市| 平武县| 九龙县| 武隆县| 尉氏县| 新闻| 木兰县| 万源市| 焉耆| 玛纳斯县| 麟游县| 额济纳旗| 奇台县| 桐庐县| 泸溪县| 沅江市| 德保县| 克拉玛依市| 嵩明县| 榆社县| 阳曲县| 麻阳| 砀山县| 杭锦后旗| 五华县| 崇明县| 夏河县| 上蔡县| 天津市| 大埔县| 新郑市| 罗源县| 江山市| 新竹市| 保康县| 杂多县|