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