free()怎么不需要长度参数?

gcb*_*gcb 2 c memory-management

可能重复:
C编程:free如何知道要释放多少?

一个随机的想法发生在我身上,为什么free(myPtr)不需要长度参数?它如何知道要释放多少内存?

我只能猜测它会跟踪它为每个特定起始地址分配的内存量.

das*_*ght 7

这是因为malloc保存有关已分配块的长度的信息,通常位于返回到程序的地址之前的位置.实现为size_t分配额外存储,将大小放在那里,添加sizeof(size_t)并将其作为malloc-ed指针返回给您并不罕见.因此,标准不要求这种实现,因此替代实现是可能的,例如基于散列表.