1. 程式人生 > >記憶體管理(一) ptmalloc基礎知識

記憶體管理(一) ptmalloc基礎知識

    Top chunk對於主分配區和非主分配區的分配方式是不一樣的。對於非主分配區,會預先從mmap區銀河一塊較大記憶體模擬sub_heap,通過管理sub_heap來響應使用者請求。因為記憶體是按地址從低向高進行分配的,在空閒記憶體的最高處一定會存在著一塊空閒的chunk,叫做top chunk。當bins不能滿足修的時候,ptmalloc會從top chunk中挑一塊記憶體返回。如果top chunk自己也不夠大,那麼分配程式會從新分配一個sub_heap並且將top chunk遷移到新的sub heap上。新的sub heap將和舊的連線起來,然後在從裡面分配記憶體。Top chunk
是永遠不會返回進bin陣列的,如果chunkfree掉,那麼chunk會直接返回到sub_heap中。如果返回的chunktop相鄰,那麼這兩個chunk就會合成新的top chunk,從而使top chunk變大。如果在free的時候記憶體大於某個閥值,並且top chunk的大小也超過了收縮閥值,那麼ptmalloc會搜尋sub_heap.如果top_chunk包含了整個sub_heap ,ptmalloc會呼叫munmap將整個sub_heap的記憶體返回給作業系統。