gpt4 book ai didi

c++ - 编写我自己的内存管理器类,重写 new 和 delete 运算符

转载 作者:太空狗 更新时间:2023-10-29 21:03:43 27 4
gpt4 key购买 nike

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

//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

我尝试四处寻找有关处理内存分配的任何指南,但我不太成功。

最佳答案

这里有一个非常非常天真的想法可以帮助您入门:

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 数组,并将内存本身用作空闲列表。

关于c++ - 编写我自己的内存管理器类,重写 new 和 delete 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13003735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com