我接受了面试,并被问到以下问题:
free()
功能太贵了。"我们想要实现一个功能 使用原型myFree()
命名为void myFree( void* p )
。myFree
需要以某种方式保存指针p
,而不是保存指针free()
函数可以。
目前,当程序员决定释放他通过myFree
函数保存的指针时,他使用函数myFinalFree()
。
在实现myFree
时我只能使用一个全局指针,因此我无法分配任何额外的内存。
myFree
的任何想法?
答案 0 :(得分:3)
您可以管理链接列表中的指针:
head=0
myFree(p)
:
p
指向的地址处的值设置为head
head
的值设置为p
myFinalFree()
:
head
开始并释放所有指针,直到达到0 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*)
的倍数地址对齐