这个问题是在一次采访中问我的。
假设 char *p=malloc(n) 分配了 n 个以上的内存,即分配了 N 个字节的内存,并且使用 free(p) 来释放分配给 p 的内存。
堆管理器可以执行这种错误的分配吗?
现在会发生什么,是释放 n 个字节还是释放 N 个字节?
有没有什么方法可以知道释放了多少内存?
EDIT
有没有什么方法可以知道释放了多少内存?
有总比没有好,
正如“Fred Larson”所指出的,mallinfo() 可以提供一些启示
是的,这就是几乎每次你做的时候都会发生的事情malloc()
. The malloc
块头包含有关块大小的信息,以及何时free()
被调用时,它将该金额返回到堆。它没有故障,它是预期的操作。
例如,一个简单的实现可能只将块的大小存储在返回指针之前的空间中。然后,free()
看起来像这样:
void free(void *ptr)
{
size_t *size = (size_t *)ptr - 1;
return_to_heap(ptr, *size);
}
Where return_to_heap()
此处用于表示执行将指定内存块返回到堆以供将来使用的实际工作的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)