初探boost之pool庫學習筆記,boostpool學習筆記
pool
記憶體池概述
通常我們習慣直接使用new、malloc等API申請分配記憶體,這樣做的缺點在於:由於所申請記憶體塊的大小不定,當頻繁使用時會造成大量的記憶體片段並進而降低效能。
記憶體池則是在真正使用記憶體之前,先申請分配一定數量的、大小相等(一般情況下)的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的一個顯著優點是盡量避免了記憶體片段,使得記憶體配置效率得到提升。
pool庫概述
pool庫實現了一個快速、緊湊的記憶體池庫,不僅能夠管理大量的對象,也可以作為STL的記憶體 Clerk,某種程度上它近似於一個小型的記憶體回收機制,在需要大量分配和釋放小對象時,有很高的效率,而且完全不用考慮delete。
pool庫包括4個組件:pool 、object_pool 、singleton_pool 、pool_alloc 。
pool
最簡單、最易使用的記憶體池,返回一個單一資料型別的記憶體指標。
在標頭檔 #include<boost/pool/pool.hpp>
操作函數
用法
#include<iostream>#include<boost/pool/pool.hpp>using namespace std;using namespace boost;int main(){ pool<> rpool(sizeof(int)); //定義記憶體池 記憶體塊大小以int為單位 int *p = (int *)rpool.malloc(); //void* 轉換為 int* rpool.free(p); //釋放 return 0;}
註:
pool在分配失敗時不會拋出異常,實際編寫代碼時應該檢查返回的時候是否為空白。
object_pool
object_pool用於對象(類執行個體)的記憶體池。
使用時包含標頭檔#include<boost/pool/object_pool.hpp>
操作函數
用法
#include<iostream>#include<boost/pool/object_pool.hpp>using namespace std;using namespace boost;class class_type{public: int a; class_type(int _a = 0):a(_a){};};int main(){ object_pool<class_type> pl; // 定義這個類的記憶體池 class_type * p = pl.malloc(); //調用malloc函數 返回一個類類型的記憶體塊 初始化該類型的指標 cout<<p->a; //預設是0 p = pl.construct(100); //構造一個新對象 cout<<p->a; return 0;}
singleton_pool
標頭檔#include<boost/pool/singleton_pool.hpp>
與pool介面完全一致
pool_alloc
標頭檔#include<boost/pool/pool_alloc.hpp>
提供了兩個標準容器模版參數的記憶體 Clerkpool_alloc和fast_pool_allocator
用法
#include<iostream>#include<boost/pool/pool_alloc.hpp>#include<vector>using namespace std;using namespace boost;int main(){ vector<int,pool_allocator<int> > v; v.push_back(1); cout<<v.size(); return 0;}
BOOST庫使用問題
你把編譯後的所有 .lib 檔案複製到 vs2010 下
如vs在c盤
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\ 下有 boost 檔案夾,裡面有用的標頭檔
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib 下有 你的 .lib 檔案
不然vc 找不到 include 和 link 路徑
我當初就是這樣搞的……
boost庫裡面主要有些什功可以?有這個庫之後c++有些什進步
boost庫包絡永珍,幾乎能想到的基礎資料結構、基礎架構都能在裡面找到。可以這麼看,把boost作為一個強大的邏輯庫,比STL強大好幾倍的邏輯庫。開發一個工程時,介面找Qt或者MFC,而複雜的邏輯用boost,你在中間定義設計。
C++語言沒有啥可以進步的,而是你的應用進步不少,主要還是縮短了開發週期。boost就是原材料庫、輪子庫,你不需要費心思重新弄這些東西。
至於Boost裡面具體有什麼,樓主自己去看看網站吧。