1

我知道使用calloc()andmalloc()将在堆上分配特定数量的内存并返回一个指向分配开头的指针。

我也知道这free( poinerVar)将取消分配(释放分配的内存)。但是,我无法想象 free() 如何知道要取消分配的内存量。诸如 C#、Java 之类的托管语言会跟踪它的垃圾回收对象,但 C 肯定不会(据我所知)。

在内存管理级别发生了什么,它允许使用 free 取消分配内存并仅将指针变量传递给它。

4

2 回答 2

2

这里的常用方法是内存分配函数在实际内存块之前存储有关已分配空间的元数据。

这样,free()就可以在实际分配的块之前读取内存,并且可以找出它实际上应该释放多少内存。

于 2013-04-01T19:10:14.953 回答
0

C 标准没有说明malloc/free如何在幕后工作。只是外在的行为。如果你真的想了解它,你需要看一个具体的实现。查看一个开源 libc,比​​如 GNU/gcc 使用的那个。

于 2013-04-01T19:12:26.173 回答