好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 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用戶進程是如何釋放內存的的相關信息資訊供網民參考!
  • 推薦文章