gpt4 book ai didi

c - 编写自己的 malloc

转载 作者:太空狗 更新时间:2023-10-29 15:26:51 26 4
gpt4 key购买 nike

我正在编写自己的 malloc() 并且我已经想到了以下内容

struct myblock
{
struct myblock *next;
struct myblock *prev;
int isFree;
unsigned availablesize;
char *buffer;
}

和空间 #define MEM_BUFFER (1024) 将成为“我的 ram”。如果我没记错的话我会

char *array[MEM_BUFFER];

拥有 1024 字节的数组(如果我错了,请纠正我)。

我们知道 MEM_BUFFER 也会包含占用空间的元数据。我有点困惑,我应该如何开始。

这是我的主要问题。我应该在每个分配请求上将结构分配给数组(如果是,那么从 struct char 数组?)。

我是否应该处理堆上的双链表并从数组中跳过 sizeof(myblock) 字节。

过去 2 天我一直在思考这个解决方案,但我仍然很困惑。

最佳答案

没有,

char *array[MEM_BUFFER];

通常不是 1024 字节的数组(除非 MEM_BUFFER 设置为 1024/sizeof (char *))。它是一个 MEM_BUFFER 字符指针数组。

你只需要:

char array[MEM_BUFFER];

虽然更好的名称可能是 heap_space

要使其由 block 组成,您需要一个额外的指针作为第一个 block :

struct myblock *heap = (struct myblock *) heap_space;

然后你可以初始化它:

heap->next = NULL;
heap->prev = NULL;
heap->isFree = 1;
heap->availablesize = sizeof heap_space - sizeof *heap;

不确定 struct myblock.buffer 应该做什么,我将 block 放在 inside 堆中,因此 block 的用户内存位于 (void *) ( block + 1);

关于c - 编写自己的 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17543108/

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