4

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

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

和空间#define MEM_BUFFER (1024) 这将是“我的公羊”。如果我没有错,那么我会

char *array[MEM_BUFFER];

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

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

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

我应该在堆上处理双链表并从数组中跳过 sizeof(myblock) 字节吗?

最近两天我一直在考虑这个解决方案,但我仍然很困惑。

4

1 回答 1

6

不,

char *array[MEM_BUFFER];

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

你只需要:

char array[MEM_BUFFER];

虽然更好的名字可能是heap_space

要使其由块组成,您需要一个附加指针,即第一个块:

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应该怎么做,我把块放在堆里面,这样块的用户内存就在(void *) (block + 1)

于 2013-07-09T08:12:30.450 回答