C 空間配置器 Allocator

2021-10-14 19:42:10 字數 2353 閱讀 2706

東陽的學習筆記

空間配置器代表一種特定的記憶體模型,並提供一種抽象概念,以便將對記憶體的申請最終轉化為對記憶體的直接呼叫。

就應用程式設計師來說,只需要傳入乙個 template 引數就可以了。

配置器提供了乙個介面,包括分配、生成、銷毀和**物件。

針對未初始化之記憶體的一些方便好用的函式強烈承諾:要麼全部成功,要麼什麼都不做

c++標準庫程式還定義了乙個 class raw_storage_iterator,可使用stl演算法

使用 get_temporary_buffer() 和 return_temporary_buffer() 很難寫出異常安全的程式**,所以它們基本上已經不再被應用於程式庫中

完成自己的配置器輕而易舉。通常你需要變化的只是 max_size(), allocate(), deallocate()。你可將將自己在記憶體方面的讀到策略體現在這三個函式中。

/*

* defalloc.hpp

* * created on: 2023年1月14日

* author: san

*/#ifndef util_defalloc_hpp_

#define util_defalloc_hpp_

#include

namespace std

;// return address of values

pointer address

(reference value)

const

const_pointer address

(const_reference value)

const

/* constructors and destructor

* - nothing to do because the allocator has no state

*/allocator()

throw()

allocator

(const allocator &

)throw()

template

<

class

u>

allocator

(const allocator&)

throw()

~allocator()

throw()

// return maximum number of elements that can be allocated

size_type max_size()

const

throw()

// allocate but don't initialize num elements of type t

pointer allocate

(size_type num,

allocator<

void

>

::const_pointer hint =0)

// initialize elements of allocated storage p with value

void

construct

(pointer p,

const reference value)

// destroy objects by calling their destructor

void

destory

(pointer p)

// deallocate storage p of deleted elements

void

deallocate

(pointer p, size_type num)};

// return all specialization of this allocator are interchangeable

template

<

classt1,

class

t2>

bool

operator==(

const allocator&,

const allocator&)

throw()

template

<

classt1,

class

t2>

bool

operator!=(

const allocator&,

const allocator&)

throw()

}#endif

/* util_defalloc_hpp_ */

STL(一) allocator 空間配置器

大概 很久很久以前,我做了乙個浪 er 漫 bi 的決定,就是自己也實現乙個stl,畢竟造輪子呀,才是最浪漫的不是嗎。於是,山很高,海很深,浪花一浪接一浪,我義無反顧走上了作死之路。nice 作死之路的第一部分,就是關於allocator,空間配置器的。stl 有自己的記憶體管理,其中最最基礎的就是...

STL 空間配置器 allocator《一》

stl的操作物件 所有的數值 都存放在容器之中,而容器則需要配置空間以置放資料。最近在看侯捷的 stl原始碼剖析 所以做了筆記。為什麼不說allocator是記憶體配置器而說他是空間配置器呢?因為空間不一定是記憶體,空間也可以是磁碟或其他輔助儲存介質。一般意義上理解 物件構造的分解 物件記憶體開闢a...

C 複習之容器空間配置器allocator的實現

include using namespace std 容器的空間配置器allocator 做四件事情 記憶體開闢與釋放 物件構造與析構 定義容器的空間配置器,和c 標準庫的allocator實現一樣 template struct allocator void deallocate void p ...