编写我自己的内存管理器类,覆盖new和delete操作符

时间:2012-10-22 00:53:05

标签: c++

我被赋予了创建自己的内存管理器类的任务,但我真的不知道从哪里开始。我的指示是;

//1> write a memman allocation function
//2> insure the alloce functions returns unused addresses
//3> once all memman memmory is used up, subsequent alloces return NULL
//4> enable freeing of memory and subsequent reuse of those free'd regions

我一直在寻找有关处理内存分配的指南,但我并没有太成功。

1 个答案:

答案 0 :(得分:4)

这是让你入门的一个非常非常天真的想法:

char arena[1000000];
char * current = arena;

void * memman(std::size_t n)
{
    char * p = current;
    current += 16 * ((n + 15) / 16);   // or whatever your alignment

    return p;
}

所有内存都是静态分配的,因此您不需要任何库调用来获取最初的内存块。我们确保只返回具有最大对齐的指针(这里硬编码为16,尽管这应该是sizeof(std::maxalign_t)之类的常量)。此版本不允许进行任何回收,并且缺少溢出检查。

对于回收,您可以尝试编写免费列表

作为一个细微的变化,您可以使您的数组成为maxalign_t的数组,这将简化步进逻辑。或者你可以使它成为uintptr_t的数组,并使用内存本身作为空闲列表。