写你自己的malloc

时间:2013-07-09 08:07:09

标签: c malloc free

我正在编写自己的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天,我仍然感到困惑。

1 个答案:

答案 0 :(得分: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);