Unterschied zwischen malloc() und calloc()
Hauptunterschiede zwischen malloc() und calloc()
- Die Funktion malloc() gibt nur die Startadresse zurück und setzt sie nicht auf Null. Andererseits gibt die Funktion calloc() die Startadresse zurück und setzt sie auf Null.
- In der Malloc-Funktion beträgt die Anzahl der Argumente 1, während in der Calloc-Funktion die Anzahl der Argumente 2 beträgt.
- Die Zeiteffizienz von malloc() ist höher als die von calloc(), wohingegen malloc() im Vergleich zu calloc() nicht sicher ist.
- malloc initialisiert den Speicher nicht, während calloc die Speicherinitialisierung durchführt.

Was ist dynamische Speicherzuweisung?
Dynamische Speicherzuordnung ist ein Prozess der Speicherzuweisung zur Laufzeit. Es gibt vier Bibliotheksroutinen: calloc(), free(), realloc()und malloc(), das verwendet werden kann, um Speicher zuzuweisen und ihn während der Programmausführung freizugeben. Diese Routinen sind in der Header-Datei stdlib.h definiert.
Was ist malloc() ?
Es handelt sich um eine Funktion, die zur dynamischen Zuweisung eines Speicherblocks verwendet wird. Es reserviert Speicherplatz der angegebenen Größe und gibt den Nullzeiger zurück, der auf den Speicherort zeigt.
Der zurückgegebene Zeiger ist normalerweise vom Typ void. Das bedeutet, dass wir jedem Zeiger eine Malloc-Funktion zuweisen können. Die vollständige Form von malloc ist die Speicherzuweisung.
Was ist calloc() ?
Calloc()-Funktion wird verwendet, um mehrere Speicherblöcke zuzuweisen. Es handelt sich um eine dynamische Speicherzuweisungsfunktion, die verwendet wird, um den Speicher komplexen Datenstrukturen wie Arrays und Strukturen zuzuweisen. Wenn diese Funktion nicht genügend Speicherplatz wie angegeben zuweist, gibt sie einen Nullzeiger zurück. Die vollständige Form der Calloc-Funktion ist die zusammenhängende Zuweisung.
Unterschied zwischen malloc() und calloc()
Hier sind wichtige Unterschiede zwischen malloc() und calloc():
| malloc () | calloc() |
|---|---|
| Die Funktion Malloc() erstellt einen einzelnen Speicherblock mit der vom Benutzer angegebenen Größe. | Die Funktion Calloc() kann einer Variablen mehrere Speicherblöcke zuweisen. |
| Die Malloc-Funktion enthält einen Müllwert. | Der von einer Calloc-Funktion zugewiesene Speicherblock wird immer auf Null initialisiert. |
| Die Anzahl der Argumente ist 1. | Die Anzahl der Argumente beträgt 2. |
| Calloc ist langsamer als Malloc. | Malloc ist schneller als Calloc. |
| Im Vergleich zu Calloc ist es nicht sicher. | Im Vergleich zu malloc ist die Verwendung sicher. |
| Die Zeiteffizienz ist höher als bei calloc(). | Die Zeiteffizienz ist geringer als bei malloc(). |
| Die Funktion Malloc() gibt nur die Startadresse zurück und setzt sie nicht auf Null. | Vor der Zuweisung der Adresse gibt die Funktion Calloc() die Startadresse zurück und setzt sie auf Null. |
| Es führt keine Initialisierung des Speichers durch. | Es führt eine Speicherinitialisierung durch. |
Syntax von malloc()
Hier ist eine Syntax von malloc()
ptr = (cast_type *) malloc (byte_size);
In der obigen Syntax ist ptr ein Zeiger auf cast_type. Die malloc-Funktion gibt einen Zeiger auf den zugewiesenen Speicher von byte_size zurück.
Example: ptr = (int *) malloc (50)
Bei erfolgreicher Ausführung dieser Anweisung wird ein Speicherplatz von 50 Byte reserviert. Die Adresse des ersten Bytes des reservierten Speicherplatzes wird dem Zeiger „ptr“ vom Typ int zugewiesen.
Syntax von calloc()
Hier ist eine Syntax von malloc()
ptr = (cast_type *) calloc (n, size);
Die obige Syntax wird verwendet, um n Speicherblöcke gleicher Größe zuzuweisen. Nachdem der Speicherplatz zugewiesen wurde, werden alle Bytes auf Null initialisiert. Zurückgegeben wird der Zeiger, der sich aktuell auf dem ersten Byte des allokierten Speicherplatzes befindet.
Beispiel für malloc() in C
Im folgenden Code wird sizeof(*ptr) verwendet, um einen Speicherblock mit 15 Ganzzahlen zuzuweisen. In der printf-Anweisung finden wir den Wert der 6. Ganzzahl.
#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr));
if (ptr != NULL) {
*(ptr + 5) = 480;
printf("Value of the 6th integer is %d",*(ptr + 5));
}
}
Ausgang:
Der Wert der 6. Ganzzahl ist 480
Beispiel für calloc() in C
Das folgende C-Sprachprogramm berechnet die Summe der ersten zehn Terme. Wenn der Zeigerwert null ist, wird der Speicherplatz nicht zugewiesen.
Die For-Schleife wird verwendet, um den Wert einer Variablen „i“ zu iterieren und die Summe auszugeben. Schließlich wird die Funktion free verwendet, um den Zeiger freizugeben.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, * ptr, sum = 0;
ptr = calloc(10, sizeof(int));
if (ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
printf("Building and calculating the sequence sum of the first 10 terms \n");
for (i = 0; i < 10; ++i) { * (ptr + i) = i;
sum += * (ptr + i);
}
printf("Sum = %d", sum);
free(ptr);
return 0;
}
Ausgang:
Aufbau und Berechnung der Sequenzsumme der ersten 10 Terme n Summe = 45
Warum malloc() verwenden?
Hier sind die Gründe für die Verwendung von malloc()
- Sie sollten malloc() verwenden, wenn Sie zur Laufzeit Speicher zuweisen müssen.
- Sie sollten malloc verwenden, wenn Sie Objekte zuordnen müssen, die über die Ausführung des aktuellen Speicherblocks hinaus vorhanden sein müssen.
- Wählen Sie malloc(), wenn Sie Speicher zuweisen müssen, der größer ist als die Größe dieses Stapels.
- Es gibt den Zeiger auf das erste Byte des zugewiesenen Speicherplatzes zurück.
- Es ermöglicht Entwicklern, Speicher genau so zuzuweisen, wie er benötigt wird.
- Diese Funktion weist eine Speicherblockgröße von Bytes aus dem Heap zu.
Warum calloc() verwenden?
Hier sind die Gründe für die Verwendung von calloc()
- Wenn Sie den zugewiesenen Speicher auf Null setzen müssen.
- Sie können calloc verwenden, das einen Zeiger zurückgibt, um Zugriff auf den Speicherheap zu erhalten.
- Wird verwendet, wenn Sie die Elemente auf Null initialisieren müssen, um einen Zeiger auf den Speicher zurückzugeben.
- Um einen mit malloc() möglichen Überlauf zu verhindern
- Verwenden Sie calloc(), um eine Seite anzufordern, von der bekannt ist, dass sie bereits auf Null gesetzt ist.
