內(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 返回對象地址
  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)存中的對象
  11. void allocator::destroy(pointer p) 析構(gòu)內(nèi)存對象

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)對象,使用allocate分配的空間必須使用construct來構(gòu)造對象
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)庫使用的std::allocator內(nèi)存分配器外,還實(shí)現(xiàn)了以下分配器。
bitmap_allocator 使用位來表示內(nèi)存是否使用的分配器
debug_allocator 加入調(diào)試信息的分配器
malloc_allocator 簡單地封裝了malloc和free函數(shù)
new_allocator 對new/delete函數(shù)進(jìn)行封裝
pool_allcator 基于內(nèi)存池的實(shí)現(xiàn)
throw_allocator 用于異常
mt_allocator 對多線程環(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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容