我们知道系统提供的动态内存分配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)
诸大侠有什么建议??
自建的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)
诸大侠有什么建议??