東陽的學習筆記空間配置器代表一種
特定的記憶體模型
,並提供一種抽象概念,以便將對記憶體的申請最終轉化為對記憶體的直接呼叫。
就應用程式設計師來說,只需要傳入乙個 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 ...