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

时间:2009-12-26 16:39:00

标签: c malloc

  

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

在C语言编程时,我经常使用malloc()来分配内存,free()来释放内存:

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

free()如何知道要释放多少内存? malloc()是否在某处创建了一个表来记住指针以及每个指针指向的内存量?

如果是这种情况,如果重命名指针,free()会失败吗? e.g:

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

如果我增加指针然后运行free()会怎样? e.g:

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

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

1 个答案:

答案 0 :(得分:19)

最常见的方式是它会在返回给您的地址之前立即存储一些信息。因此,如果malloc在内部返回地址0x1004,则malloc将放弃从0x0FFC开始的内存,并将存储各种信息,例如0xFFC - 0x1003之间的内存中的大小,但应用程序将被告知分配从0x1004开始。 / p>

唯一重要的是获得与malloc返回的完全相同的地址。