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