Warum nimmt "free" in C nicht die Anzahl der freizugebenden Bytes?

Nur um klar zu sein: Das weiß ichmalloc undfree sind in der C-Bibliothek implementiert, die normalerweise Speicherblöcke vom Betriebssystem zuweist und selbst verwaltet, um der Anwendung kleinere Mengen an Speicher zuzuweisen und die Anzahl der zugewiesenen Bytes zu verfolgen. Diese Frage ist nichtWoher weiß Frei, wie viel Frei ist.

Vielmehr möchte ich wissen warumfree wurde auf diese Weise in erster Linie gemacht. Da es sich um eine einfache Sprache handelt, erscheint es mir durchaus sinnvoll, einen C-Programmierer zu bitten, nicht nur zu verfolgen, welcher Speicher zugewiesen wurde, sondern auch, wie viel (tatsächlich sehe ich im Allgemeinen, dass ich die Anzahl der Bytes nachverfolge) trotzdem malloced). Mir fällt auch auf, dass man explizit die Anzahl der Bytes angibtfree kann einige Leistungsoptimierungen ermöglichen, z. Ein Allokator, der separate Pools für verschiedene Allokationsgrößen hat, kann anhand der Eingabeargumente bestimmen, von welchem Pool er befreit werden soll, und es entsteht insgesamt weniger Speicherplatz.

Also, kurz gesagt, warum?malloc undfree so erstellt, dass sie intern die Anzahl der zugewiesenen Bytes verfolgen müssen? Ist es nur ein historischer Unfall?

Eine kleine Änderung: Einige Leute haben Punkte wie "Was ist, wenn Sie einen anderen Betrag als den, den Sie zugewiesen haben, freigeben" angegeben. Meine vorgestellte API könnte einfach erfordern, dass eine genau die Anzahl der zugewiesenen Bytes freigibt. mehr oder weniger zu befreien, könnte einfach UB oder eine definierte Implementierung sein. Ich möchte die Diskussion über andere Möglichkeiten jedoch nicht entmutigen.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage