2013-06-12 113 views
-3

我想了解free()的工作原理。在下面的例子中,free()如何知道块中需要释放多少个字节?免费功能()

#include <stdlib.h> 

int main() 
{  
    char *p= NULL; 
    int size = 25; 
    p = (char *)malloc(size); 

    /* some operation on p */ 

    free(p); 
} 
+1

人们不应该downvote重复的问题。重复的问题并不意味着它是一个低质量的问题,这意味着其他人已经提出了这样的问题。 Asker在发布这个问题之前没有搜索过。 –

+0

@ Mr.32当你将鼠标悬停在downvote上时,它会向你显示一个上下文提示:“这个问题没有显示任何研究工作;它不清楚或没有用”。这听起来相当准确,对我来说。 *点击*! – Sebivor

回答

2

这是实施的具体,定义的唯一的事情是应该像它的工作原理到应用程序,并实现可以自由使用任何结构,它需要提供良好的性能/低内存占用/。 ..

作为一个例子,一种方法是在块返回之前预留几个字节,并在那里存储大小。例如,如果您使用的是25个字节,它实际上会保留29个字节,将大小存储在前4个字节中,并返回指向最后25个字节的指针。 free()然后可以拿指针,减4并读取大小。

另一种方法是将地址/大小存储在散列表中,这样当有人调用free()时,它可以在散列表中查看大小。