內(nèi)存分配器[GeekBand]

1 標(biāo)準(zhǔn)接口

張老師在課上講述了C++內(nèi)存分配器的標(biāo)準(zhǔn)接口崎坊,接口規(guī)格如下:

  1. 一組typedef:
    -allocator::value_type
    -allocator::pointer
    -allocator::const_pointer
    -allocator::reference
    -allocator::const_reference
    -allocator::size_type
    -allocator::difference_type
  2. allocator::rebind allocator的內(nèi)嵌模板备禀,需要定義other成員
  3. allocator::allocator() 構(gòu)造函數(shù)
  4. allocator::allocator(const allocator&) 拷貝構(gòu)造函數(shù)
  5. allocator::~allocator() 析構(gòu)函數(shù)
  6. pointer allocator::address(reference x)const 返回對(duì)象地址
  7. pointer allocator::allocate(size_type n, const void *=0) 分配空間
  8. void allocator::deallocator(pointer p, size_type n) 釋放空間
  9. size_type allocator::max_size() const 可以分配的最大空間
  10. void allocator::construct(pointer p, const T&x) 構(gòu)造分配內(nèi)存中的對(duì)象
  11. void allocator::destroy(pointer p) 析構(gòu)內(nèi)存對(duì)象

2 用法

allocator的用法有兩種:
第一種是直接使用allocator來分配內(nèi)存并管理內(nèi)存.

allocator<int> alloc;
int *p = alloc.allocate(2); //分配足夠存放2個(gè)Int數(shù)據(jù)的空間
int *free_space = p;
alloc.construct(free_space, 1); //構(gòu)造分配空間內(nèi)對(duì)象,使用allocate分配的空間必須使用construct來構(gòu)造對(duì)象
free_space++;
alloc.construct(free_space, 2);
alloc.deallocate(p, 2); //釋放空間

第二種是通過容器使用allocator奈揍。

    vector<int, std::allocator> vec;
    vec.push_back(1);

一般情況下曲尸,都是在容器中使用內(nèi)存分配器,不推薦直接使用allocator男翰。如果遇到需要使用內(nèi)存分配的情況另患,可以使用new/delete代替。

3 分配器實(shí)現(xiàn)

GUN C++除了標(biāo)準(zhǔn)庫(kù)使用的std::allocator內(nèi)存分配器外蛾绎,還實(shí)現(xiàn)了以下分配器昆箕。
bitmap_allocator 使用位來表示內(nèi)存是否使用的分配器
debug_allocator 加入調(diào)試信息的分配器
malloc_allocator 簡(jiǎn)單地封裝了malloc和free函數(shù)
new_allocator 對(duì)new/delete函數(shù)進(jìn)行封裝
pool_allcator 基于內(nèi)存池的實(shí)現(xiàn)
throw_allocator 用于異常
mt_allocator 對(duì)多線程環(huán)境進(jìn)行了優(yōu)化
上述分配器的實(shí)現(xiàn)都在GNU的ext目錄下,使用范例如下:
#include <ext/bitmap_allocator.h>
vector<int, __gnu_cxx::bitmap_allocator> vec;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末租冠,一起剝皮案震驚了整個(gè)濱河市鹏倘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顽爹,老刑警劉巖第股,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異话原,居然都是意外死亡夕吻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門繁仁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涉馅,“玉大人,你說我怎么就攤上這事黄虱≈煽螅” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)晤揣。 經(jīng)常有香客問我桥爽,道長(zhǎng),這世上最難降的妖魔是什么昧识? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任钠四,我火速辦了婚禮,結(jié)果婚禮上跪楞,老公的妹妹穿的比我還像新娘缀去。我一直安慰自己,他們只是感情好甸祭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布缕碎。 她就那樣靜靜地躺著,像睡著了一般池户。 火紅的嫁衣襯著肌膚如雪咏雌。 梳的紋絲不亂的頭發(fā)上岳锁,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天荸百,我揣著相機(jī)與錄音鲜戒,去河邊找鬼粒梦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛书妻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼凝赛,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了坛缕?” 一聲冷哼從身側(cè)響起墓猎,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赚楚,沒想到半個(gè)月后毙沾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宠页,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年左胞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片举户。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烤宙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俭嘁,到底是詐尸還是另有隱情躺枕,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站拐云,受9級(jí)特大地震影響罢猪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叉瘩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一膳帕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧房揭,春花似錦备闲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蓬痒,卻和暖如春泻骤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梧奢。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工狱掂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亲轨。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓趋惨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親惦蚊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子器虾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,513評(píng)論 1 51
  • 【轉(zhuǎn)載】原文地址:std::string詳解作者:kieven2008 之所以拋棄char*的字符串而選用C++標(biāo)...
    VAYY閱讀 641評(píng)論 0 2
  • GeekBand STL與泛型編程 Third Week 變易算法 變易算法是指那些改變?nèi)萜髦袑?duì)象的操作。具體包括...
    不會(huì)飛的鳥人閱讀 306評(píng)論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉蹦锋,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,692評(píng)論 0 9
  • 接著上節(jié) condition_varible 兆沙,本節(jié)主要介紹future的內(nèi)容,練習(xí)代碼地址莉掂。本文參考http:/...
    jorion閱讀 14,778評(píng)論 1 5