如何在C中实现malloc和free?

时间:2011-10-09 20:43:56

标签: c memory-management

  

可能重复:
  How do malloc() and free() work?

我在某处读到使用相同指针参数自由调用两次会导致未定义的行为。那么免费如何知道它必须释放多少内存?当我们调用malloc / calloc / realloc时,堆是否总是分配连续的内存?请提供相关文章/帖子/博客等的链接。

3 个答案:

答案 0 :(得分:5)

mallocfree如何工作是实施定义的。通常,有关内存块的信息将存储在ptr下方的标题中。但不一定。

关于mallocfree的好处是你不需要知道它们是如何工作的。系统会为您处理细节。

  

我在某处读到使用相同指针参数自由调用两次会导致未定义的行为。为了理解这一点,我首先必须知道免费是如何工作的?

我不确定我同意这个说法。你只需要遵守规则。

  

当我们调用malloc / calloc / realloc时,堆是否总是分配连续的内存?

如果你的意思是返回的内存块在地址空间中是连续的,那么是的就是这样。如果你的意思是连续的分配是顺序的,那么没有。

答案 1 :(得分:1)

您可以在tcmalloc页面上阅读有关示例实现的信息。它相对简短直接:http://goog-perftools.sourceforge.net/doc/tcmalloc.html(跳到概述)

如果您想知道malloc如何从操作系统请求内存,通常可以通过调用sbrkmmap来实现。但当然,这是实施的定义。

答案 2 :(得分:0)

如果要查看实现,请查找glibc,它是C标准库的GNU实现,其中包括内存管理功能。但请注意,实现的确切细节在其他平台上会有所不同,并且可能会在标准库的版本之间发生变化。