先说清楚: 我确实知道 malloc
和 free
是在 C 库中实现的,C 库通常从操作系统中分配内存块,并自己管理分配给应用程序的较小内存块,并跟踪分配的字节数。这个问题不是 免费怎么知道多少免费。
相反,我想知道为什么 free
最初是以这种方式制造的。作为一门低级语言,我认为让 C 程序员不仅要记录分配了什么内存,还要记录分配了多少内存是完全合理的(事实上,我通常发现我最终还是要记录被错配的字节数)。我还突然想到,明确地给 free
提供字节数可能会允许一些性能优化,例如,一个分配器有不同分配大小的独立池,可以通过查看输入参数来确定哪个池可以释放,而且总体空间开销会更小。
那么,简而言之,为什么创建 malloc
和 free
时要求它们在内部跟踪分配的字节数?这只是一个历史意外吗?
一个小小的编辑: 一些人提供了类似“如果你释放的数量与你分配的数量不同怎么办”这样的观点。我想象中的 API 可能只需要释放所分配的字节数; 释放或多或少可能只是 UB 或实现定义。不过,我不想打击讨论其他可能性的积极性。