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
閱讀(1942)
評論(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
<
2025年8月
>
日
一
二
三
四
五
六
27
28
29
30
31
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
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(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實現筆記
搜索
積分與排名
積分 - 165305
排名 - 160
最新評論
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)分析器源碼(4799)
2.?觀察者模式(4367)
3.?自制虛擬機框架(3873)
4.?實習一周總結(3681)
5.?山寨STL實現之vector(3587)
評論排行榜
1.?使用面向組合子算法寫詞法分析器(9)
2.?自制虛擬機框架(9)
3.?觀察者模式(8)
4.?CosmosKernel初探(8)
5.?代理模式(7)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 lwch
久久久久国产日韩精品网站
|
久久中文字幕视频、最近更新
|
一本色道久久99一综合
|
久久精品国产亚洲av水果派
|
国产高清美女一级a毛片久久w
|
久久福利青草精品资源站免费
|
久久久WWW免费人成精品
|
久久久久波多野结衣高潮
|
精品久久久久久久无码
|
久久久久99精品成人片
|
国产成人精品免费久久久久
|
女同久久
|
女人香蕉久久**毛片精品
|
97久久国产露脸精品国产
|
国产激情久久久久影院老熟女免费
|
亚洲午夜无码久久久久
|
亚洲人成无码网站久久99热国产
|
蜜臀av性久久久久蜜臀aⅴ
|
久久99精品久久久久久不卡
|
久久av无码专区亚洲av桃花岛
|
久久一区二区免费播放
|
国产成人精品久久亚洲高清不卡
|
亚洲午夜久久久影院伊人
|
一本色道久久88综合日韩精品
|
日本三级久久网
|
2020最新久久久视精品爱
|
99久久无色码中文字幕
|
欧美喷潮久久久XXXXx
|
亚洲国产美女精品久久久久∴
|
日日狠狠久久偷偷色综合0
|
久久精品国产亚洲AV不卡
|
国产三级精品久久
|
狠狠色综合久久久久尤物
|
久久久久久一区国产精品
|
久久国产福利免费
|
久久九色综合九色99伊人
|
久久国产午夜精品一区二区三区
|
国产精品日韩深夜福利久久
|
国产精品九九久久免费视频
|
91久久精品视频
|
欧美无乱码久久久免费午夜一区二区三区中文字幕
|