- !!!用户新注册邮件系统遭恶意攻击,暂不能发送邮件,请隔天尝试。寻求解决方案中
- 【征集】西西河的经济学,及清流措施,需要主动参与者
- 『稷下学宫』新认证方式
- 24年网站打算和努力目标
主题:【请教】自建memory pool,请问如何管理内存碎片 -- 东方射日
我们知道系统提供的动态内存分配new-delete; malloc-free,系统会完成内存碎片的整理。
自建的memory pool就要自己进行了。
memory pool重载new,delete,从自建的memory pool中动态分配内存。有可能产生内存碎片
例如new-delete产生了4个50k的fragment,共有200k的free memory,此时allocate 100k的内存会失败
什么算法处理?
我的想法是建立链表,存储pool中的偏移量,size和应用中申请内存的指针的指针。线程idle时进行内存整理,DEFRAGMENT会涉及内存块的移动,就要修改应用中的pointer。 defragment后通过指针的指针修改应用中指针的指向。
问题是重载new,应用中不会传递给我他申请内存的指针:
调用重载new,
void * p =new(size);
我在new中返回一个指针指向pool中。
但是我不知道void **p,无法在链表中存储*p的地址。整理内存时,无法修改应用中的*p的值
我想除非改变new的形式:new(size, **p),但显然不是一个好主意。
诸大侠有什么建议??
- 相关回复 上下关系6
🙂【请教】自建memory pool,请问如何管理内存碎片
🙂去看看STL的内存管理方法 kavin 字0 2007-02-02 02:19:29
🙂这个思路好像不太对 1 泰让 字264 2007-02-01 17:13:44
🙂是有问题,多谢指出,现有另一个思路 东方射日 字852 2007-02-01 19:42:33
🙂一点想法 1 泰让 字532 2007-02-02 08:07:20
🙂请管理员将主贴移信息技术版,再删除该信息 东方射日 字0 2007-02-01 14:29:19