婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux用戶進程是如何釋放內存的

Linux用戶進程是如何釋放內存的

熱門標簽:江蘇保險智能外呼系統產品介紹 咸寧智能營銷電話機器人怎么樣 諾基亞地圖標注app 個人電銷機器人 高德地圖標注樓房入駐 西寧人工外呼系統線路商 北京外呼防封系統是什么 成都哪里有地圖標注公司 南昌四川外呼系統

Linux用戶進程是如何釋放內存的
Linux進程使用內存的基本流程:


從圖中我們可以看出,進程的堆,并不是直接建立在Linux的內核的內存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的動態內存分配策略上),堆的管理是由glibc進行的。所以我們調用free對malloc得到的內存進行釋放的時候,并不是直接釋放給操作系統,而是還給了glibc的堆管理實體,而glibc會在把實際的物理內存歸還給系統的策略上做一些優化,以便優化用戶任務的動態內存分配過程。
那么glibc的堆管理器在什么時候才把物理內存歸還給系統呢?
它會從堆的最大線性地址開始,從后向前計算用戶任務當前有多少空閑的堆內存(直到碰到使用中的堆內存地址為止),比如在該圖中:


它會認為有2048k的可釋放內存,只有在該值大于某個特定的threshhold時(2.3.6上為64k),它才會把這些內存歸還給系統。而在中間的“未使用”內存是不會歸還給系統的,所以系統也不可能再利用這塊物理內存頁(我們假設系統沒有swap區和swap文件),也就是說系統的內存會為此減少,除非在它之前的堆內存都用free進行釋放以后,glibc的堆管理器才有可能(只是有可能)把該段內存歸還給系統。
由此,我們在使用malloc/free時應該小心,特別是在初始化時分配了好多內存,但是在這之后卻再也不需要這么多的內存了,而這塊內存又沒有達到threshhold值或者在堆的最高線性地址處有某塊內存沒有釋放,但是它前面的所有堆內存都釋放了;這種情況下,用戶任務將會浪費一些物理內存,這在資源比較緊張的嵌入式系統中是不可容忍的。

標簽:電信 金華 長春 中衛 清遠 綏化 長春 濮陽

巨人網絡通訊聲明:本文標題《Linux用戶進程是如何釋放內存的》,本文關鍵詞  Linux,用戶,進程,是,如何,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux用戶進程是如何釋放內存的》相關的同類信息!
  • 本頁收集關于Linux用戶進程是如何釋放內存的的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 平定县| 左权县| 遂平县| 双辽市| 五原县| 萍乡市| 册亨县| 明星| 长海县| 东乌珠穆沁旗| 宝丰县| 阿图什市| 金昌市| 安义县| 苏州市| 水城县| 北碚区| 大兴区| 兖州市| 泰顺县| 中卫市| 淮滨县| 牟定县| 兰西县| 子洲县| 哈巴河县| 额尔古纳市| 金溪县| 冀州市| 东明县| 靖江市| 平江县| 通渭县| 平江县| 合山市| 宣汉县| 田东县| 南丹县| 仙游县| 镶黄旗| 梅河口市|