【问题标题】:write your own malloc编写自己的malloc
【发布时间】:2013-07-09 08:07:08
【问题描述】:

我正在编写自己的 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) 字节吗?

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

【问题讨论】:

    标签: c malloc free


    【解决方案1】:

    不,

    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);

    【讨论】:

    • @unwind.. 非常感谢你给我指导,我已经开始工作了。我的第二个问题是: struct myblock *heap = (struct myblock *) heap_space;这就是我们可以从通过类型转换 heap_space 创建根节点开始的方式,但是第二个节点呢,我的意思是 rquests 什么时候开始呢?我将如何创建第二个节点以开始工作。与我们首先创建的相同或..如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多