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
閱讀(1927)
評論(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實現筆記
搜索
積分與排名
積分 - 162913
排名 - 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)分析器源碼(4762)
2.?觀察者模式(4341)
3.?自制虛擬機框架(3845)
4.?實習一周總結(3634)
5.?山寨STL實現之vector(3544)
評論排行榜
1.?使用面向組合子算法寫詞法分析器(9)
2.?自制虛擬機框架(9)
3.?CosmosKernel初探(8)
4.?觀察者模式(8)
5.?代理模式(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 lwch
久久国产色AV免费观看
|
日本久久中文字幕
|
天天躁日日躁狠狠久久
|
国产产无码乱码精品久久鸭
|
69SEX久久精品国产麻豆
|
久久99国产一区二区三区
|
亚洲午夜精品久久久久久app
|
欧美伊人久久大香线蕉综合
|
亚洲va国产va天堂va久久
|
亚洲国产天堂久久综合网站
|
合区精品久久久中文字幕一区
|
精品久久久无码人妻中文字幕豆芽
|
国产日韩欧美久久
|
日日躁夜夜躁狠狠久久AV
|
精品久久久久久久久久久久久久久
|
伊人久久精品无码av一区
|
久久精品无码专区免费
|
久久99精品国产麻豆蜜芽
|
久久精品国产亚洲AV忘忧草18
|
国产激情久久久久影院老熟女免费
|
国内精品伊人久久久久777
|
久久99精品国产麻豆婷婷
|
韩国三级大全久久网站
|
亚洲国产精品无码久久久不卡
|
久久久久香蕉视频
|
久久免费精品一区二区
|
久久亚洲国产成人精品性色
|
久久婷婷五月综合色奶水99啪
|
久久精品国产99久久香蕉
|
国产精品免费久久久久电影网
|
国产综合久久久久
|
精品久久无码中文字幕
|
久久亚洲中文字幕精品有坂深雪
|
一级做a爰片久久毛片看看
|
欧美精品丝袜久久久中文字幕
|
国产成人精品久久
|
国产福利电影一区二区三区久久久久成人精品综合
|
99久久99久久精品免费看蜜桃
|
波多野结衣AV无码久久一区
|
国内精品综合久久久40p
|
亚洲欧美伊人久久综合一区二区
|