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

我已经尝试过寻找有关处理内存分配的任何指南,但我并没有太成功。

4

1 回答 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))。此版本不允许任何回收,并且缺少溢出检查。

对于回收,您可以尝试编写一个free list

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

于 2012-10-22T01:03:35.137 回答