被人问到malloc和free的实现问题。
我们知道malloc的调用形式如:type* p = (type *)malloc(n*sizeof(type))
free的调用形式如:free(p)
好了,问题来了,free函数,我们只给传入一个指针,没有传入内存块的大小n,那么编译器怎么知道要释放多少字节的内存,如果让你来实
现怎么实现?
当时,蒙了,郁闷(丢人)。。。
之前自己都看过类似的代码的。。。
无非就是当申请内存的时候,p指向的内存的起始字节有几个存放着这块内存的一些信息,包括大小,类型等。
=====================================================
free的源代码:
struct mem_control_block
{
int is_available; //这是一个标记
int size; //这是实际空间的大小
}
void free(void *ptr)
{
struct mem_control_block *free;
free = ptr - sizeof(struct mem_control_block);
free->is_available = 1;
return;
}