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

可能重复:
C编程:免费如何知道免费多少?

在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? **/ 

它会在原始数组的末尾解除分配一块额外的内存吗?

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

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