在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? **/
它会在原始数组的末尾释放一块额外的内存吗?
答案 0 :(得分:19)
最常见的方式是它会在返回给您的地址之前立即存储一些信息。因此,如果malloc在内部返回地址0x1004,则malloc将放弃从0x0FFC开始的内存,并将存储各种信息,例如0xFFC - 0x1003之间的内存中的大小,但应用程序将被告知分配从0x1004开始。 / p>
唯一重要的是获得与malloc返回的完全相同的地址。