天天看點

leveldb 03 Arena學習

學習了 levelDB源碼分析-Arena和leveldb學習:記憶體池Arena

圖檔是上面第一篇部落格裡的:

leveldb 03 Arena學習

1.成員變量blocks_是個vector,它的每個元素都是一個char*指針,指向一段記憶體(或者說是char[]數組). 在Arena的析構函數裡,會周遊該vector的每個元素,使用delete[]删除所有配置設定的記憶體。 blocks_的主要作用也在于此,儲存了配置設定的所有記憶體的位址,在Arena析構時可以找到所有的位址,依次釋放掉記憶體。

2. alloc_ptr_在某一時刻指向的是如圖中所示的blocks_的其中一個元素指向記憶體的未使用空間的首位址。

3. private的函數AllocateNewBlock是本類最底層的函數,實作主要步驟是:

char* result = new char[block_bytes]; /*配置設定記憶體*/ 
blocks_.push_back(result);/*将記憶體首位址放到blocks裡,用于析構時釋放掉。*/
           

4. public接口主要是兩個:Allocate 和 AllocateAligned . 而這兩個函數主要是在一定條件下調用private函數AllocateFallback, 而AllocateFallback是在一定條件下調用AllocateNewBlock, 是以最終public接口還是主要調用的AllocateNewBlock.

5. 至于成員變量alloc_ptr_ 和alloc_bytes_remaining_ 主要用在所需配置設定記憶體特别小的時候,直接利用目前alloc_ptr指向的剩餘記憶體char*。

繼續閱讀