我被赋予了创建自己的内存管理器类的任务,但我真的不知道从哪里开始。我的指示是;
//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
我一直在寻找有关处理内存分配的指南,但我并没有太成功。
答案 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
的数组,并使用内存本身作为空闲列表。