lwch
【QQ:510134884】【Email:
lwch748@gmail.com
】
C++博客
首頁(yè)
新隨筆
聯(lián)系
聚合
管理
隨筆-91 評(píng)論-137 文章-0 trackbacks-0
山寨STL實(shí)現(xiàn)之a(chǎn)llocator
作為一個(gè)山寨的STL,那么不得不提的是其中的allocator(空間配置器)。顧名思義,它是負(fù)責(zé)空間分配用的,下面代碼十分簡(jiǎn)單,僅對(duì)C函數(shù)malloc和free進(jìn)行了薄薄的一層封裝,同時(shí)給定了自定義函數(shù)free_handler用于在空間分配時(shí)候由于內(nèi)存被占滿了而導(dǎo)致的分配失敗。
這里值得注意的是:這個(gè)釋放函數(shù)的函數(shù)指針應(yīng)該是由調(diào)用方來(lái)負(fù)責(zé)指定,并且它僅有一個(gè)參數(shù)表明至少需要釋放多少字節(jié)的內(nèi)存。
下面來(lái)看代碼,代碼非常簡(jiǎn)單,應(yīng)此這里就不逐一展開(kāi)說(shuō)明了。
#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
完整代碼請(qǐng)到
http://qlanguage.codeplex.com/
下載
posted on 2012-05-20 21:45
lwch
閱讀(1925)
評(píng)論(0)
編輯
收藏
引用
所屬分類:
STL
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
【推薦】100%開(kāi)源!大型工業(yè)跨平臺(tái)軟件C++源碼提供,建模,組態(tài)!
相關(guān)文章:
QCore/Library說(shuō)明文檔
山寨STL實(shí)現(xiàn)之內(nèi)存池V2
如何比較兩個(gè)變量的類型是否相同
山寨STL實(shí)現(xiàn)之list
山寨STL實(shí)現(xiàn)之內(nèi)存池
山寨STL實(shí)現(xiàn)之vector
山寨STL實(shí)現(xiàn)之traits,construct&destruct
山寨STL實(shí)現(xiàn)之a(chǎn)llocator
山寨STL實(shí)現(xiàn)筆記
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問(wèn)
Chat2DB
管理
編譯原理交流群: 83905136
QLanguage交流群: 38843264
我的騰訊微博
我的新浪微博
QLanguage的新浪微博
QLanguage項(xiàng)目(GoogleCode)
QLanguage項(xiàng)目(GitHub)
博客已轉(zhuǎn)移到:
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
常用鏈接
我的隨筆
我的評(píng)論
我參與的隨筆
留言簿
(2)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類
(92)
CMinus(2)
NScript(26)
QLanguage(24)
STL(9)
操作系統(tǒng)(6)
其他(4)
設(shè)計(jì)模式(15)
數(shù)據(jù)結(jié)構(gòu)(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)
相冊(cè)
QLanguage
Blogs
某牛人的Blog
Projects
NScript Compiler
QLanguage Compiler
Redis
Redis中文命令手冊(cè)
Websites
C++奮斗園
VC知識(shí)庫(kù)
程序員聯(lián)合開(kāi)發(fā)網(wǎng)
最新隨筆
1.?QParserGenerator的文法文件介紹
2.?5年編程之旅
3.?QParserGenerator代碼分析二(A fix&An example)
4.?QParserGenerator代碼分析一(生成LALR1 DFA)
5.?QCore/Library說(shuō)明文檔
6.?詞法分析器2(ε-NFA到DFA的轉(zhuǎn)換)
7.?詞法分析器1(正則表達(dá)式到ε-NFA的轉(zhuǎn)換)
8.?山寨STL實(shí)現(xiàn)之內(nèi)存池V2
9.?如何比較兩個(gè)變量的類型是否相同
10.?山寨STL實(shí)現(xiàn)之list
11.?山寨STL實(shí)現(xiàn)之內(nèi)存池
12.?山寨STL實(shí)現(xiàn)之vector
13.?山寨STL實(shí)現(xiàn)之traits,construct&destruct
14.?山寨STL實(shí)現(xiàn)之a(chǎn)llocator
15.?山寨STL實(shí)現(xiàn)筆記
搜索
積分與排名
積分 - 162857
排名 - 162
最新評(píng)論
1.?re: 5年編程之旅
感謝LWCH的娃娃,當(dāng)年陪伴一起度過(guò)了多少游戲時(shí)間.
--萬(wàn)馬奔騰
2.?re: 5年編程之旅
@zapline
當(dāng)時(shí)確實(shí)用的是別人的代碼,幾年前的東西記不清了,不要這么較真。
--lwch
3.?re: 5年編程之旅
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--zapline
4.?re: 5年編程之旅[未登錄](méi)
這精神我很敬仰, 我是散修, 目前還是入門, 我已經(jīng)入了差不多4年門.
為自己汗顏.
--jains
5.?re: 5年編程之旅
還很年輕,加油
--Richard Wei
閱讀排行榜
1.?LR(0),SLR(1),LR(1)分析器源碼(4761)
2.?觀察者模式(4340)
3.?自制虛擬機(jī)框架(3844)
4.?實(shí)習(xí)一周總結(jié)(3634)
5.?山寨STL實(shí)現(xiàn)之vector(3541)
評(píng)論排行榜
1.?使用面向組合子算法寫詞法分析器(9)
2.?自制虛擬機(jī)框架(9)
3.?CosmosKernel初探(8)
4.?觀察者模式(8)
5.?代理模式(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 lwch
久久国产免费观看精品3
|
久久精品一区二区
|
久久精品一区二区三区不卡
|
久久久久无码中
|
国产亚州精品女人久久久久久
|
99久久国产亚洲高清观看2024
|
久久亚洲春色中文字幕久久久
|
久久久久久久久久久精品尤物
|
亚洲一级Av无码毛片久久精品
|
国产精品xxxx国产喷水亚洲国产精品无码久久一区
|
一本久道久久综合狠狠爱
|
久久91精品国产91
|
国产精品久久久久久久人人看
|
一级a性色生活片久久无少妇一级婬片免费放
|
久久se这里只有精品
|
久久人人爽人人澡人人高潮AV
|
欧美大战日韩91综合一区婷婷久久青草
|
热久久最新网站获取
|
中文字幕久久精品无码
|
97香蕉久久夜色精品国产
|
久久久一本精品99久久精品66
|
AV狠狠色丁香婷婷综合久久
|
中文字幕成人精品久久不卡
|
久久性精品
|
久久久久久亚洲AV无码专区
|
91精品免费久久久久久久久
|
久久久久亚洲AV无码专区网站
|
亚洲欧洲精品成人久久奇米网
|
亚洲精品白浆高清久久久久久
|
久久精品国产亚洲欧美
|
一级a性色生活片久久无少妇一级婬片免费放
|
天天做夜夜做久久做狠狠
|
亚洲精品乱码久久久久久
|
久久久国产精品网站
|
欧美国产成人久久精品
|
久久久久久久亚洲Av无码
|
久久精品国产只有精品66
|
青青国产成人久久91网
|
欧美日韩精品久久久久
|
久久精品中文騷妇女内射
|
久久国产热这里只有精品
|