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
久久亚洲精品无码播放
|
久久99精品国产99久久6
|
欧美日韩精品久久久免费观看
|
国产婷婷成人久久Av免费高清
|
亚洲国产综合久久天堂
|
99久久国产主播综合精品
|
久久精品国产精品亚洲人人
|
国产精品成人无码久久久久久
|
久久久精品国产亚洲成人满18免费网站
|
手机看片久久高清国产日韩
|
亚洲精品乱码久久久久久按摩
|
AA级片免费看视频久久
|
久久精品国产2020
|
久久久久国产精品三级网
|
国产精品无码久久久久久
|
99精品久久精品一区二区
|
久久婷婷色综合一区二区
|
91超碰碰碰碰久久久久久综合
|
午夜精品久久久久久中宇
|
国内精品久久久久影院老司
|
欧美精品一本久久男人的天堂
|
亚洲欧洲中文日韩久久AV乱码
|
91久久福利国产成人精品
|
国产精品久久99
|
久久亚洲中文字幕精品有坂深雪
|
久久er国产精品免费观看2
|
亚洲级αV无码毛片久久精品
|
亚洲午夜久久久
|
亚洲国产精品综合久久网络
|
久久亚洲欧洲国产综合
|
久久国产精品免费
|
久久久久99精品成人片
|
99久久精品国产一区二区三区
|
亚洲国产一成久久精品国产成人综合
|
97精品伊人久久大香线蕉
|
久久久久国产一区二区三区
|
国产福利电影一区二区三区,免费久久久久久久精
|
91精品国产91久久久久久青草
|
久久福利青草精品资源站
|
91麻精品国产91久久久久
|
久久精品不卡
|