初探boost之pool庫學習筆記,boostpool學習筆記

來源:互聯網
上載者:User

初探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裡面具體有什麼,樓主自己去看看網站吧。
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.