Warum Calloc nimmt zwei Argumente während Malloc nur eine?

8

IMO eins ist genug, warum benötigt calloc , um es in zwei Argumente zu teilen?

    
x86 24.09.2011, 01:41
quelle

2 Antworten

5

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.

    
Jens Gustedt 24.09.2011 07:31
quelle
3

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.

    
ssube 24.09.2011 01:45
quelle

Tags und Links