校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 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用戶進程是如何釋放內存的的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 云安县| 梅河口市| 固镇县| 巴里| 平原县| 新余市| 邵阳市| 布尔津县| 遂平县| 江津市| 六盘水市| 虎林市| 无棣县| 镇沅| 景洪市| 区。| 正镶白旗| 溆浦县| 滕州市| 海丰县| 从江县| 张家口市| 黔江区| 大埔县| 福鼎市| 关岭| 洛阳市| 兴城市| 牟定县| 滨州市| 定南县| 阿勒泰市| 武平县| 海林市| 阳江市| 定襄县| 拜泉县| 孟村| 廉江市| 紫金县| 广宁县|