c free()函数问题

时间:2010-12-14 13:28:20

标签: c memory-management malloc free

  

可能重复:
  C programming : How does free know how much to free?

您好,

当我有以下代码时:

void *ptr = malloc(100); // alloc 100 bytes
// do sth
free(ptr);

free()函数如何知道必须释放多少空间?

谢谢你!

-

好的,我发现其他问题也一样,请关闭 - 抱歉

2 个答案:

答案 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);
}