我正在编写自己的malloc(),并且我已经配置了以下
struct myblock
{
struct myblock *next;
struct myblock *prev;
int isFree;
unsigned availablesize;
char *buffer;
}
和空格#定义MEM_BUFFER(1024),它将是"我的ram"。如果我没有错,那么我会有
char *array[MEM_BUFFER];
有1024字节的数组(如果我错了,请纠正我)。
正如我们所知,MEM_BUFFER也将包含占用空间的元数据。我有点困惑,我该怎么开始。
这是我的主要问题。我应该在每个分配请求中将结构分配给数组吗(如果是,则从struct-char-array?)。
我应该在堆上处理双链表并跳过数组中的sizeof(myblock)字节吗。
在过去的两天里,我一直在思考这个解决方案,但我仍然感到困惑。
否,
char *array[MEM_BUFFER];
通常不是1024字节的数组(除非MEM_BUFFER
被设置为1024 / sizeof (char *)
)。它是一个MEM_BUFFER
字符指针的数组。
你只需要:
char array[MEM_BUFFER];
尽管更好的名称可能是CCD_ 4。
要使它由块组成,您需要一个额外的指针,即第一个块:
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)
;