free()如何知道要释放多少内存?

时间:2010-12-01 17:49:40

标签: c memory-management free

  

可能重复:
  C programming : How does free know how much to free?

在此代码段中

void main() {
void *p = malloc(300);
printf("%d",sizeof(*p));
free(p);
}

free如何知道它应该从void指针释放多少内存?

我想,如果有内部表/函数,它应该可用于查找任何类型对象的大小,而printf的输出是1

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

malloc和free自己做隐藏的会计,这样他们就能做正确的事情。

sizeof()不使用此记帐信息的原因是sizeof()是编译时运算符,并且malloc / free信息在运行时才可用。

答案 2 :(得分:1)

这取决于实现。在我看过的一些系统中,它会在指针之前保留一些字节,其中包含保留块大小的信息,下一个内存空闲槽等。至于sizeof(void),这个未指定。

答案 3 :(得分:0)

malloc的每个实现都有一个内部数据结构,表明它分配了多少个块。 freemalloc齐头并进,因此可以确切地知道要查找的位置。

有关详细信息,请参阅this Wiki article on Free List