您好,
当我有以下代码时:
void *ptr = malloc(100); // alloc 100 bytes
// do sth
free(ptr);
free()函数如何知道必须释放多少空间?
谢谢你!-
好的,我发现其他问题也一样,请关闭 - 抱歉
答案 0 :(得分:5)
此信息通常包含在malloc
实现管理的某些内存区域中。这些信息通常先于malloc
分发给您的实际内存,但这是一个实现细节,您不能在此依赖任何内容。
答案 1 :(得分:2)
它依赖于实现,但通常底层系统是地址到块的映射,它知道该内存映射的大小。
以下是来自glibc的条纹代码,它显示了它基本上就是我刚才所说的。
void fREe(Void_t* mem)
{
arena *ar_ptr;
mchunkptr p;
if (__free_hook != NULL) {
(*__free_hook)(mem, NULL);
}
if (mem == 0) /* free(0) has no effect */
return;
p = mem2chunk(mem);
if (chunk_is_mmapped(p)) /* release mmapped memory. */
{
munmap_chunk(p);
return;
}
ar_ptr = arena_for_ptr(p);
chunk_free(ar_ptr, p);
(void)mutex_unlock(&ar_ptr->mutex);
}