- !!!用户新注册邮件系统遭恶意攻击,暂不能发送邮件,请隔天尝试。寻求解决方案中
- 【征集】西西河的经济学,及清流措施,需要主动参与者
- 『稷下学宫』新认证方式
- 24年网站打算和努力目标
主题:【请教】自建memory pool,请问如何管理内存碎片 -- 东方射日
共:💬6 🌺2 新:
首先,这个问题来源是对XBOX/PS3编程的,相对内存比较紧张,而且对速度要求比较高,申请内存池的目的主要是减少对系统内存分配的请求,而内存池中的fragment随运行时间的增加,也是绝对不可忽视的。
经有人建议,采用老MAC OS的内存管理机制,使用双指针,不直接将内存地址返回给程序,而是维护一个地址列表,然后将地址列表中元素的地址返回给程序,这样OS可以在空余期间收集碎片,而程序需要dereference两次来取得实际地址。
我们在memory pool中建立一个Memory_pointer_table存储在pool中的地址
new返回MPTBL中的地址
defragment整理pool和MPTBL中指针值。应用程序allocate得到的指针不变。dereference后指向的内存内容不变。
代价是*是一定要重载的,如果要求支持数组的话,new[]和delete[]和数组下标[]也是要重载。
实现起来有一定困难,特别是类中的动态内存要用到的成员指针.*无法重载。限制了类中动态内存的应用。
不过起码是可以实现的方案。毕竟自己写个memory pool不能指望100%达到系统的功能
- 相关回复 上下关系6
🙂【请教】自建memory pool,请问如何管理内存碎片 东方射日 字816 2007-02-01 13:29:56
🙂去看看STL的内存管理方法 kavin 字0 2007-02-02 02:19:29
🙂这个思路好像不太对 1 泰让 字264 2007-02-01 17:13:44
🙂是有问题,多谢指出,现有另一个思路
🙂一点想法 1 泰让 字532 2007-02-02 08:07:20
🙂请管理员将主贴移信息技术版,再删除该信息 东方射日 字0 2007-02-01 14:29:19