本章主要是空間配置器,一般我們都不用管的。不過弄懂這個對接下來的很多內容都可以搞懂,這個還可以提高stl的效率。
下面是allocator的必要介面:
allocator::value_type
allocator::pointer
allocator::const_pointer
allocator::reference
allocator::const_reference
allocator::size_type
allocator::difference_type
allocator::rebind
allocator::allocator()
allocator::allocator(const allocator&)
templateallocator::allocator(const allocator&)
allocator::~allocator()
pointer allocator::address(reference x)const
const_pointer allocator::address(const_reference x)const
pointer allocator::allocate(size_tyoe n, const void* = 0)
void allocator::deallocate(pointer p, size_type n)
size_type allocator::max_size() const
void allocator::construct(pointer p, const t& x)
void allocator::destroy(pointer p)
根據上面的介面設計乙個簡單的控制項配置器
生成兩個檔案jjalloc.h和main.cpp
jjalloc.h
#pragma once
#include
#include
#include
#include
#include
namespace jj
return tmp;
}template
inline void _deallocate(t* buffer)
template
inline void _construct(t1* p, const t2& value)
template
inline void _destroy(t* ptr)
template
class allocator
;allocator()
template
allocator(const allocator& c)
pointer allocate(size_type n, const void* hint = 0)
void deallocate(pointer p, size_type n)
void construct(pointer p, const t& value)
void destroy(pointer p)
pointer address(reference x)
const_pointer const_address(const_reference x)
size_type max_size() const};}
/main.cpp的
#include "jjalloc.h"
#include
#include
using namespace std;
int main()
;unsigned int i;
vector> iv(ia, ia + 5);
for (i = 0; i < iv.size(); i++)
}以上**為了在vs2010下面執行,在源**的基礎上加上了拷貝建構函式。
下面我就淺要的分析一下這段**的含義吧。
先介紹一下,基本上很少用到的函式。
set_new_handler函式:當運算子找不到足夠大的連續記憶體來為物件分配記憶體時呼叫這個函式。會自動丟擲異常。
這段**簡單的構建出了乙個容器的基本框架。容器的基本寫法就是用泛函式寫的。大量的template。allocator類
主要應用與容器的記憶體管理。在分配物件時,從這個池來獲取,而不是使用new。在某種情況下,這種高度自定義的
記憶體管理能極大地提高程式效率。
stl標準規格告訴我們。配置器定義於之中
#include//負責記憶體空間的配置與釋放
#include//負責物件內容的構造與析構
std::alloc設計思想如下:
1.向system heap要求空間
2.考慮多執行緒狀態
3.考慮記憶體不足時的應變措施
4.考慮過多"小型區塊"可能造成的記憶體碎片問題
第一級配置器直接使用malloc()和free(),第二級配置器則視情況採用不同的策略:當配置區塊超過128bytes時,視之為「足夠大」,便呼叫第一級配置器。
當配置區塊小於128bytes時,視之為"過小",為了降低額外負擔,便採用複雜的memory pool整理方式。
汗,寫到這裡感覺有點照本宣科的意思~。自己也感覺一知半解。不過總的來說就是屬於記憶體分配這部分。
看了這一部分的內容。感覺可以用這個來做訊息佇列。
STL原始碼剖析 第二章 空間配置器
c 記憶體配置操作和釋放操作如下 1 class foo 2 foo pf new foo 配置記憶體,然後構造物件 3delete pf 將物件析構,然後釋放記憶體 記憶體配置操作由 alloc allocate 負責,記憶體釋放操作由 alloc deallocate 負責 物件構造操作由 co...
第二章 STL簡介
容器共同操作操作 insert pos,e 將元素e的拷貝安插於迭代器pos所指的位置 erase beg,end 移除 beg,end 區間內的所有元素 clear 移除所有元素 c.size 返回元素個數 c.empty 判斷容器是否為空 c.max size 返回元素最大可能數量 固定值 c....
第二章 STL簡介
1 容器 container 2 迭代器 iterator 3 演算法 algorithm 4 函式物件 function object 5 介面卡 adaptor 6 空間配製器 allocator 構造 拷貝和析構 非變動操作 基本原理 將插入的值 第乙個運算元 與樹根 第二個運算元 紅黑樹,二...