可能重复:
C编程:free如何知道要释放多少?
在C语言编程时,我经常malloc()用来分配内存并free()释放它:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);
Run Code Online (Sandbox Code Playgroud)
怎么free()知道释放多少内存?是否malloc()在某处创建了一个表来记住指针以及每个指针指向的内存量?
如果是这种情况,free()如果我重命名指针会失败吗?例如:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/
Run Code Online (Sandbox Code Playgroud)
如果我增加指针然后运行会发生什么free()?例如:
MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/
Run Code Online (Sandbox Code Playgroud)
它会在原始数组的末尾解除分配一块额外的内存吗?
R S*_*hko 19
最常见的方式是它会在返回给您的地址之前立即存储一些信息.因此,如果malloc在内部返回地址0x1004,则malloc将放置从0x0FFC开始的内存,并将存储各种信息,例如0xFFC - 0x1003之间的内存中的大小,但应用程序将被告知分配从0x1004开始.
唯一重要的是获得与malloc返回的完全相同的地址.