设为首页 加入收藏

TOP

简易位图内存管理器的设计 (三)
2014-11-23 22:57:49 来源: 作者: 【 】 浏览:12
Tags:简易 位图 内存 管理 设计
_1_0.txt)
8 //
9 // See http://www.boost.org for updates, documentation, and revision history.
10
11 #ifndef ALLOCATOR_GUARD_HPP_
12 #define ALLOCATOR_GUARD_HPP_
13
14
15 template
16 class guard
17 {
18 private:
19 Mutex& mtx;
20 guard(const guard&);
21 void operator =(const guard&);
22 public:
23 explicit guard(Mutex& nmtx) : mtx(nmtx) { mtx.lock(); }
24 ~guard() { mtx.unlock(); }
25 };
26
27 #endif
理论上一般情况下上述内存管理器比较节约内存,因为每块内存的开销仅仅1字节,64个这样的小块组成一个chunk,仅再需要8字节开销,远远比一般的new/malloc节约内存。当然,有人可能争辩说这1字节的开销也可以去掉,用自由列表就是了,而问题恰恰出在这里。用自有列表可以避免搜索位图,分配和回收内存均在一个内存池里进行,速度更快,但是对于长生命周期的对象来说,跟泄漏内存没有什么分别。还是用上面的那个双链表为例,用自由列表理论上1M个节点仅需要12MB堆内存,但是如果该链表哪怕只有1个节点,从操作系统看上去也会用12MB堆内存,而此时我们的单对象位图内存管理器需要840(8 + 64 * (12+1) = 840)字节堆内存,从操作系统看上去是1页(多数32位系统是4096字节)。

需要指出的是single_object_allocator跟STL的allocator分配和回收内存的行为完全不同,不能用它来当作std::list的第二个参数,否则需要修改allocate/deallocate的实现代码。

single_object_allocator只能管理等大的内存块,此时可能比一般比系统的malloc/free, new/delete速度稍快一些,尽管它的设计初衷是为了尽可能的节约内存。

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于顺序存储的多叉树实现: (5) .. 下一篇不用比较运算符及循环控制语句,..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: