記憶體池技術詳解裡面已經很清楚地講解了寫乙個記憶體池的方法了。而這裡我結合遊戲開發中的使用,說說記憶體池的應用。
首先不管怎麼去應用,如果我們不去手動釋放占有的資源,那麼我們的記憶體總有用完的那麼一天。
我們的記憶體池
class memorypool
~node():next(null){}
node* next;
unsigned char data[0];
}; node* free_lsit;
node* alloc_list
public:
建構函式
析構函式
void alloc(int datasize); //分配記憶體,按記憶體池技術詳解的做法,大同小異
void free(unsigned char* p); //**,按記憶體池技術詳解做法
private:
allsize; //分配大小
allnum; //分配塊數
usenum; //使用數
freenum; //空閒數
};
而現在我需要做的就是設計乙個記憶體管理的類,來使用它,
再設計乙個類memoryallocator中,宣告乙個static memorypool pool[1024]; 介面為void allocator(size);
當需要分配size個記憶體時,size除2^4 = 16,向上取乙個整數result,那麼這個size的記憶體就由pool[result]來管理了,16的片太小了,當size太大時,這個pool就不夠用了,我們完全可以讓這個pool去管理16位元組的記憶體, 32自己的記憶體,2^n次房的記憶體,可以根據size大小來確定應該讓哪個2^4n大小的pool管理。
這樣在我們頻繁申請釋放記憶體的消耗變小,效率增加,除了當free_list為null時,才會向系統申請一塊記憶體,其他條件則是o(1)的消耗。當然也可以設計成,預分配size的記憶體,每次需要再分配記憶體時,像系統申請size*2^n的空間,這樣申請記憶體的操作就更少,std::vector也是這個樣子的
記憶體池基礎應用
本文只涉及記憶體池的基本應用,以及學習資料 於網路,剛興趣的可以搜一下。我這裡只是總結一下自己的想法,做乙個搬運工。再複雜的工程也離不開基礎應用的實戰變化,這就像上學時的教材課後習題其實才是學生最應該掌握的。基礎沒打好直接上附加題,沒什麼意義。記憶體池的基礎應用嵌入式指標的應用 頻繁的malloc會...
記憶體池 C 記憶體池
c c 下記憶體管理是讓幾乎每乙個程式設計師頭疼的問題,分配足夠的記憶體 追蹤記憶體的分配 在不需要的時候釋放記憶體 這個任務相當複雜。1.呼叫malloc new,系統需要根據 最先匹配 最優匹配 或其他演算法在記憶體空閒塊表中查詢一塊空閒記憶體,呼叫free delete,系統可能需要合併空閒記...
記憶體池 執行緒池
1 記憶體池是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的乙個顯著優點是,使得記憶體分配效率得到提公升。2 執行緒池是一種多執行緒處理形式,處理過程中將任務新...