Ich vermute, dass dies wahrscheinlich Geschichte ist und älter ist als die Zeiten, in denen C Prototypen für Funktionen hatte. Zu diesen Zeiten ohne einen Prototyp mussten die Argumente im Grunde genommen int
sein, der typedef
size_t
war wahrscheinlich noch nicht einmal erfunden. Aber dann ist INTMAX
der größte Chunk, den Sie mit malloc
zuweisen könnten, und die Aufteilung in zwei gibt Ihnen mehr Flexibilität und erlaubt Ihnen, wirklich große Arrays zuzuweisen. Selbst zu dieser Zeit gab es Methoden, um große Seiten aus dem System zu erhalten, die standardmäßig ausgelöscht wurden, so dass Effizienz mit calloc
nicht so sehr ein Problem war als mit malloc
.
Heutzutage, mit size_t
und dem Funktionsprototyp zur Hand, ist dies nur eine tägliche Erinnerung an die reiche Geschichte von C.
Die Parameternamen dokumentieren es ziemlich gut:
%Vor% Die letztere Form ermöglicht eine ordentliche Zuweisung von Arrays, indem die Anzahl der Elemente und die Elementgröße angegeben wird. Das gleiche Verhalten kann mit malloc
durch Multiplikation erreicht werden.
calloc
initialisiert jedoch auch den zugewiesenen Speicher auf 0. malloc
macht keine Initialisierung, daher ist der Wert nicht definiert. malloc
kann theoretisch schneller sein, da nicht der gesamte Speicher gesetzt wird; Dies ist wahrscheinlich nur bei großen Mengen zu bemerken.
In diese Frage wird vorgeschlagen, dass calloc
eindeutig ist -alloc und malloc
ist mem-alloc.