提高自由功能 - 求职面试

时间:2014-05-12 18:55:14

标签: c memory-management free allocation

我接受了面试,并被问到以下问题:

  

free()功能太贵了。"我们想要实现一个功能   使用原型myFree()命名为void myFree( void* p )。   myFree需要以某种方式保存指针p,而不是保存指针   free()函数可以。

目前,当程序员决定释放他通过myFree函数保存的指针时,他使用函数myFinalFree()

在实现myFree时我只能使用一个全局指针,因此我无法分配任何额外的内存。

myFree的任何想法?

1 个答案:

答案 0 :(得分:3)

您可以管理链接列表中的指针:

  • 初始化全局head=0
  • 内幕功能myFree(p)
    1. p指向的地址处的值设置为head
    2. 的值
    3. head的值设置为p
    4. 的值
  • 内幕功能myFinalFree()
    1. head开始并释放所有指针,直到达到0
    2. head的值设置为0

以下是一个编码示例:

typedef int t_ptr;

static t_ptr head = 0;

void myFree(void* p)
{
    if (p)
    {
        *(t_ptr*)p = head;
        head = (t_ptr)p;
    }
}

void myFinalFree()
{
    t_ptr* p = (t_ptr*)head;
    while (p)
    {
        head = *p;
        free(p);
        p = (t_ptr*)head;
    }
}

备注:

  • 您必须确保sizeof(t_ptr) == sizeof(void*)
  • 上述代码假设malloc始终至少分配sizeof(void*)个字节,与sizeof(void*)的倍数地址对齐