簡單說涂臣,Handle就是指針的指針。
在c語言里面,假如你通過malloc申請一段內(nèi)存空間赁遗,heap給你一個指針直接指到你可用內(nèi)存的起始位置署辉。在你釋放之前操作系統(tǒng)無法將這段內(nèi)存移動。
至于為啥要移動岩四,因為你在程序各處調(diào)用大小不一的malloc會產(chǎn)生內(nèi)存碎片哭尝。碎片多了總之不好,最好把碎片移到一塊剖煌,這樣就又有大塊的內(nèi)存空間可以malloc了材鹦。這個過程叫defragmentation。跟windows上硬盤碎片整理一樣。
malloc直接給你指針的話就不方便heap管理內(nèi)存。因為只要你不free,它就不敢動那塊內(nèi)存。但是假如給你指針的指針嘁傀,增加一次跳轉(zhuǎn)。動態(tài)內(nèi)存管理內(nèi)部維護一個表智润,第一次對指針dereference進入這個表悦冀,再來一次才到你可用的內(nèi)存塊。這樣動態(tài)內(nèi)存管理就可以把真正的那段內(nèi)存定期合并起來醉蚁,然后只要調(diào)整那個表指向新的地址燃辖。