lwch
【QQ:510134884】【Email:
lwch748@gmail.com
】
C++博客
首頁
新隨筆
聯系
聚合
管理
隨筆-91 評論-137 文章-0 trackbacks-0
山寨STL實現之allocator
作為一個山寨的STL,那么不得不提的是其中的allocator(空間配置器)。顧名思義,它是負責空間分配用的,下面代碼十分簡單,僅對C函數malloc和free進行了薄薄的一層封裝,同時給定了自定義函數free_handler用于在空間分配時候由于內存被占滿了而導致的分配失敗。
這里值得注意的是:這個釋放函數的函數指針應該是由調用方來負責指定,并且它僅有一個參數表明至少需要釋放多少字節的內存。
下面來看代碼,代碼非常簡單,應此這里就不逐一展開說明了。
#ifndef _QLANGUAGE_LIBRARY_ALLOC_H_
#define
_QLANGUAGE_LIBRARY_ALLOC_H_
#if
0
#include
<
new
>
#define
__THROW_BAD_ALLOC throw std::bad_alloc
#elif
!defined(__THROW_BAD_ALLOC)
#include
<
iostream
>
#define
__THROW_BAD_ALLOC std::cerr << "out of memory" << std::endl; exit(1)
#endif
namespace
QLanguage
{
namespace
Library
{
template
<
typename T
>
class
allocator
{
public
:
allocator()
{
}
allocator(
const
allocator
<
T
>&
)
{
}
static
T
*
allocate()
{
const
size_t size
=
sizeof
(T);
T
*
result
=
(T
*
)malloc(size);
while
(result
==
nullptr)
{
if
(free_handler) free_handler(size);
else
__THROW_BAD_ALLOC;
result
=
(T
*
)malloc(size);
}
return
result;
}
static
T
*
allocate(
const
size_t
&
n)
{
const
size_t size
=
n
*
sizeof
(T);
if
(size
<=
0
)
throw
"
bad allocate size
"
;
T
*
result
=
(T
*
)malloc(size);
while
(result
==
nullptr)
{
if
(free_handler) free_handler(size);
else
__THROW_BAD_ALLOC;
result
=
(T
*
)malloc(size);
}
return
result;
}
static
void
deallocate(T
*
p)
{
free(p);
}
static
void
deallocate(T
*
p,
const
size_t
&
)
{
free(p);
}
static
T
*
reallocate(T
*
p,
const
size_t
&
n)
{
const
size_t size
=
n
*
sizeof
(T);
if
(size
<=
0
)
throw
"
bad reallocate size
"
;
T
*
result
=
(T
*
)realloc(p, size);
while
(result
==
nullptr)
{
if
(free_handler) free_handler(size);
else
__THROW_BAD_ALLOC;
result
=
(T
*
)realloc(p, size);
}
return
result;
}
public
:
static
void
(
*
free_handler)(
const
size_t
&
);
static
void
set_handler(
void
(
*
h)(
const
size_t
&
))
{
free_handler
=
h;
}
}
;
template
<
typename T
>
typename
void
(
*
allocator
<
T
>
::free_handler)(
const
size_t
&
)
=
nullptr;
}
}
#endif
完整代碼請到
http://qlanguage.codeplex.com/
下載
posted on 2012-05-20 21:45
lwch
閱讀(1937)
評論(0)
編輯
收藏
引用
所屬分類:
STL
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
QCore/Library說明文檔
山寨STL實現之內存池V2
如何比較兩個變量的類型是否相同
山寨STL實現之list
山寨STL實現之內存池
山寨STL實現之vector
山寨STL實現之traits,construct&destruct
山寨STL實現之allocator
山寨STL實現筆記
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
編譯原理交流群: 83905136
QLanguage交流群: 38843264
我的騰訊微博
我的新浪微博
QLanguage的新浪微博
QLanguage項目(GoogleCode)
QLanguage項目(GitHub)
博客已轉移到:
http://blog.q-devel.com
<
2012年5月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
(92)
CMinus(2)
NScript(26)
QLanguage(24)
STL(9)
操作系統(6)
其他(4)
設計模式(15)
數據結構(4)
游戲(2)
隨筆檔案
(91)
2013年10月 (1)
2013年6月 (1)
2013年5月 (2)
2013年4月 (1)
2013年2月 (2)
2013年1月 (1)
2012年8月 (2)
2012年7月 (1)
2012年6月 (2)
2012年5月 (2)
2011年11月 (1)
2011年9月 (1)
2011年8月 (2)
2011年7月 (5)
2011年6月 (5)
2011年5月 (8)
2011年4月 (2)
2011年3月 (1)
2011年2月 (7)
2011年1月 (8)
2010年12月 (3)
2010年11月 (1)
2010年10月 (1)
2010年9月 (7)
2010年8月 (7)
2010年7月 (15)
2010年6月 (2)
相冊
QLanguage
Blogs
某牛人的Blog
Projects
NScript Compiler
QLanguage Compiler
Redis
Redis中文命令手冊
Websites
C++奮斗園
VC知識庫
程序員聯合開發網
最新隨筆
1.?QParserGenerator的文法文件介紹
2.?5年編程之旅
3.?QParserGenerator代碼分析二(A fix&An example)
4.?QParserGenerator代碼分析一(生成LALR1 DFA)
5.?QCore/Library說明文檔
6.?詞法分析器2(ε-NFA到DFA的轉換)
7.?詞法分析器1(正則表達式到ε-NFA的轉換)
8.?山寨STL實現之內存池V2
9.?如何比較兩個變量的類型是否相同
10.?山寨STL實現之list
11.?山寨STL實現之內存池
12.?山寨STL實現之vector
13.?山寨STL實現之traits,construct&destruct
14.?山寨STL實現之allocator
15.?山寨STL實現筆記
搜索
積分與排名
積分 - 164080
排名 - 162
最新評論
1.?re: 5年編程之旅
感謝LWCH的娃娃,當年陪伴一起度過了多少游戲時間.
--萬馬奔騰
2.?re: 5年編程之旅
@zapline
當時確實用的是別人的代碼,幾年前的東西記不清了,不要這么較真。
--lwch
3.?re: 5年編程之旅
評論內容較長,點擊標題查看
--zapline
4.?re: 5年編程之旅[未登錄]
這精神我很敬仰, 我是散修, 目前還是入門, 我已經入了差不多4年門.
為自己汗顏.
--jains
5.?re: 5年編程之旅
還很年輕,加油
--Richard Wei
閱讀排行榜
1.?LR(0),SLR(1),LR(1)分析器源碼(4779)
2.?觀察者模式(4353)
3.?自制虛擬機框架(3859)
4.?實習一周總結(3649)
5.?山寨STL實現之vector(3560)
評論排行榜
1.?使用面向組合子算法寫詞法分析器(9)
2.?自制虛擬機框架(9)
3.?觀察者模式(8)
4.?CosmosKernel初探(8)
5.?代理模式(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 lwch
国产亚洲婷婷香蕉久久精品
|
久久久久亚洲AV无码观看
|
99精品国产99久久久久久97
|
久久久久亚洲精品天堂
|
国产99久久精品一区二区
|
亚洲一级Av无码毛片久久精品
|
国内精品久久久久影院薰衣草
|
无码专区久久综合久中文字幕
|
久久精品亚洲精品国产欧美
|
亚洲国产精品久久电影欧美
|
精品久久一区二区
|
久久精品免费全国观看国产
|
一本色道久久88加勒比—综合
|
久久亚洲国产成人影院
|
99国产精品久久
|
久久91精品国产91
|
一本久久精品一区二区
|
久久99精品久久久久久
|
亚洲国产精品无码久久一线
|
久久亚洲电影
|
久久婷婷五月综合色99啪ak
|
国产精品无码久久久久久
|
久久精品国产亚洲AV无码娇色
|
日韩一区二区久久久久久
|
久久久久国产精品熟女影院
|
久久精品国产网红主播
|
亚洲中文字幕久久精品无码APP
|
久久精品国产亚洲一区二区三区
|
久久精品国产亚洲AV无码偷窥
|
国产精品久久久久免费a∨
|
久久99精品九九九久久婷婷
|
国产精品热久久毛片
|
一级女性全黄久久生活片免费
|
99久久人人爽亚洲精品美女
|
国产成人精品久久二区二区
|
久久亚洲精品成人av无码网站
|
蜜臀久久99精品久久久久久小说
|
久久久久久久91精品免费观看
|
伊人久久大香线蕉综合热线
|
久久夜色精品国产亚洲
|
漂亮人妻被中出中文字幕久久
|