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

15

可能重复:
C编程:free如何知道要释放多少内存?

在C语言中,我经常使用malloc()来分配内存并使用free()释放它:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);

free()如何知道要释放多少内存?malloc()是否在某个地方创建了一个表来记住指针以及每个指针所指向的内存大小?如果是这样,那么如果我重命名指针,free()会失败吗?例如:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/

如果我增加指针地址并运行free(),会发生什么?例如:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/

它会在原始数组的末尾之外再释放一块额外的内存吗?


3
重复的问题:C编程中,free如何知道要释放多少空间? - codaddict
1个回答

20

最常见的方式是在返回地址之前存储一些信息。因此,如果 malloc 返回地址 0x1004,则在内部,malloc 将保留从0x0FFC开始的内存,并将各种信息(如大小)存储在0xFFC - 0x1003 之间的内存中,但应用程序会告知分配从0x1004开始。

对于 free 函数而言,唯一重要的事情就是获取与 malloc 返回的确切地址相同的地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接