關於Memory Pool的一些想法及實現

2021-04-06 18:23:28 字數 1048 閱讀 1761

在《effective c++》(second edition)中item 10 "write operator delete if you write operator new"中提到乙個memory pool技術, 並給出乙個例子

void *airplane::operator new(size_t size)

for(int i=1; i但明顯, 例子中給出的操作只能針對airplane類進行操作, 試想, 能不能擴充套件到對任何類進行這樣的memory pool操作呢?

第一想法就是用template.

花了一中午的時間寫了乙個cmemorypool模板類. 如下所示

#ifndef __memorypool_h__

#define __memorypool_h__

#include template class cmemorypool

~cmemorypool()

}_t *alloc()

return (_t *)p;

}void free(_t *p)

private:

union envelope

;const size_t init_size;// 預設每次分配多少初始大小的空間

envelope *headoffreelist; // 當前自由空間首址

std::listm_memoryheadlist; // 申請空間首址向量

};#endif // !defined __memorypool_h__

此模板類對於內建型別, 可做如下使用.

#include #include "memorypool.h"

int main()

;cmemorypoolmyclass::st_objectpool(10);

myclass::myclass()

{std::cout<<"a() called"<

至此, 已經完成了對於任何類的乙個cmemorypool類的寫法, 自然會想到, 怎麼樣去寫乙個基類cmemorypoolbaseclass, 讓所有繼承該類的子類都具有這種記憶體池的動態記憶體分配方式呢?

關於RemoteView 的一些字型的一些問題

最近在做乙個 在notification 新增 天氣通知的小部分 發現困擾在 如何給 remoteview 中的字型 作修改 大家都知道 textview 設定字型 在xml 中 可以 設定 3種 而其他字型的設定 需要通過 typeface 去設定 具體 將字型放置在asset 資料夾中 type...

關於Thread的一些

執行緒有幾種狀態 1.產生 new 執行緒已經產生,只是放在記憶體中啥事都不幹。2.可執行 runnable 在呼叫了start方法到它獲得系統給它分配了時間片之前,或者時間片用完了但還沒執行完。3.執行 running 獲得了時間片,正在執行。4.死亡 dead 執行完成 5.阻塞 block 不...

關於SpannableString的一些用法

因為專案中有用到spannablestring,所以稍微寫了一下,有參考 如果需要詳盡的可以去鏈結部落格裡看看 分別有 spanned.span exclusive exclusive 前後都不包括 spanned.span inclusive exclusive 前面包括,後面不包括 替換 spa...