內存碎片一般是由於空閑的連續空間比要申請的空間小,導致這些小內存塊不能被利用。產生內存碎片的方法很簡單,舉個例:
假設有一塊一共有100個單位的連續空閑內存空間,范圍是0~99。如果你從中申請一塊內存,如10個單位,那么申請出來的內存塊就為0~9區間。這時候你繼續申請一塊內存,比如說5個單位大,第二塊得到的內存塊就應該為10~14區間。
如果你把第一塊內存塊釋放,然后再申請一塊大於10個單位的內存塊,比如說20個單位。因為剛被釋放的內存塊不能滿足新的請求,所以只能從15開始分配出20個單位的內存塊。
現在整個內存空間的狀態是0~9空閑,10~14被占用,15~24被占用,25~99空閑。其中0~9就是一個內存碎片了。如果10~14一直被占用,而以后申請的空間都大於10個單位,那么0~9就永遠用不上了,造成內存浪費。
如果你每次申請內存的大小,都比前一次釋放的內村大小要小,那么就申請就總能成功。