12
为什么C中的`free`不占用要释放的字节数?
明确一点:我确实知道malloc并free在C库中实现,该库通常从OS分配内存块,并进行自己的管理以将较小的内存分配给应用程序,并跟踪分配的字节数。这个问题不是免费如何知道多少免费。 相反,我想知道为什么free首先要采用这种方式。作为一种低级语言,我认为要求C程序员不仅跟踪分配了什么内存而且跟踪多少内存是完全合理的(实际上,我通常发现我最终跟踪了字节数)仍然分配)。在我看来,明确给出字节数free可能会允许某些性能优化,例如,具有针对不同分配大小的单独池的分配器将能够通过查看输入参数来确定要释放哪个池,并且总体而言,空间开销会更少。 因此,简而言之,为什么要创建malloc和free创建它们以使它们在内部跟踪分配的字节数?这只是历史性的意外吗? 一个小的修改:一些人提供了一些要点,例如“如果您释放的金额与分配的金额不同,将会怎样?” 我想象中的API可能只需要一个就可以准确释放分配的字节数。释放或多或少可以简单地由UB或实现定义。不过,我不想阻止关于其他可能性的讨论。