如何在C中跟踪动态内存的大小

如何在C中跟踪动态内存的大小,c,malloc,free,dynamic-memory-allocation,calloc,C,Malloc,Free,Dynamic Memory Allocation,Calloc,我知道使用calloc()和malloc()将在堆上分配特定数量的内存,并返回一个指向分配开始的指针 我还知道free(poinerVar)将取消分配(释放已分配的内存)。但是,我无法想象free()如何知道要取消分配的内存量。诸如C#之类的托管语言,Java会跟踪垃圾收集的对象,但C肯定不会(据我所知) 内存管理级别上发生的情况是,允许使用free取消分配内存,并只传递指针变量。这里通常的方法是,内存分配函数在实际内存块之前存储有关已分配空间的元数据 这样,free()就可以在实际分配的块前面

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

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


内存管理级别上发生的情况是,允许使用free取消分配内存,并只传递指针变量。

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


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

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

总得有人跟踪。langage标准只是不需要任何特定的方法来实现这一点。什么都行!