编写自己的内存管理器类,覆盖new和delete运算符。

3

我被分配任务制作自己的内存管理器类,但我真的不知道从哪里开始。我的指示是:

//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
你能使用 malloc 吗?还是你也需要编写它? - Fantastic Mr Fox
它没有明确指出我是否可以使用malloc。 - user1527216
1个回答

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的数组,并使用内存本身作为自由列表。


请纠正我,current += move 是否根据 n 的字节大小移动指针?+15 是什么意思?它与对齐有关吗? - user1527216

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接