Malloc () vs calloc (): Wichtige Unterschiede, die anhand von Beispielen erläutert werden

Inhaltsverzeichnis:

Anonim

Bevor wir den Unterschied zwischen Malloc und Calloc lernen, lernen wir:

Was ist dynamische Speicherzuordnung?

Die dynamische Speicherzuweisung ist ein Prozess zum Zuweisen von Speicher zur Laufzeit. Es gibt vier Bibliotheksroutinen, calloc (), free (), realloc () und malloc (), mit denen Speicher zugewiesen und während der Programmausführung freigegeben werden kann. Diese Routinen sind in der Header-Datei stdlib.h definiert.

Was ist malloc ()?

Mit dieser Funktion wird ein Speicherblock dynamisch zugeordnet. 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. Dies bedeutet, dass wir jedem Zeiger die Malloc-Funktion zuweisen können. Die vollständige Form von Malloc ist die Speicherzuweisung.

In diesem Tutorial lernen Sie:

  • Was ist dynamische Speicherzuordnung?
  • Was ist malloc ()?
  • Was ist calloc ()?
  • Warum malloc () verwenden?
  • Warum calloc () verwenden?
  • Syntax von malloc ()
  • Syntax von calloc ()
  • Beispiel für malloc () in C.
  • Beispiel für calloc () in C.
  • Unterschied zwischen calloc () und malloc ()

Was ist calloc ()?

Die Calloc () -Funktion wird verwendet, um mehrere Speicherblöcke zuzuweisen. Es handelt sich um eine dynamische Speicherzuweisungsfunktion, mit der der Speicher komplexen Datenstrukturen wie Arrays und Strukturen zugeordnet wird. Wenn diese Funktion nicht genügend Speicherplatz wie angegeben zuweist, wird der Nullzeiger zurückgegeben. Die vollständige Form der Calloc-Funktion ist die zusammenhängende Zuordnung.

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 zuweisen müssen, die über die Ausführung des aktuellen Speicherblocks hinaus existieren müssen.
  • Wählen Sie malloc (), wenn Sie Speicher zuweisen müssen, der größer als die Größe dieses Stapels ist.
  • 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 dem Heap eine Speicherblockgröße von Bytes 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 Überlauf zu verhindern, der mit malloc () möglich ist
  • Verwenden Sie calloc (), um eine Seite anzufordern, von der bekannt ist, dass sie bereits auf Null gesetzt ist.

Syntax von malloc ()

Hier ist eine Syntax von malloc ()

ptr = (cast_type *) malloc (byte_size);

In der obigen Syntax ist ptr ein Zeiger von cast_type. Die Malloc-Funktion gibt einen Zeiger auf den zugewiesenen Speicher von byte_size zurück.

Example: ptr = (int *) malloc (50)

Wenn diese Anweisung erfolgreich ausgeführt wird, ist 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 derselben Größe zuzuweisen. Nachdem der Speicherplatz zugewiesen wurde, werden alle Bytes auf Null initialisiert. Der Zeiger, der sich derzeit im ersten Byte des zugewiesenen Speicherplatzes befindet, wird zurückgegeben.

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#includeint main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}

Ausgabe:

Der Wert der 6. Ganzzahl ist 480

Beispiel für calloc () in C.

Das folgende C-Sprachprogramm berechnet die Summe der ersten zehn Begriffe. 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 zu drucken. Zuletzt wird funktionsfrei verwendet, um den Zeiger freizugeben.

#include #include 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;}

Ausgabe:

Aufbau und Berechnung der Sequenzsumme der ersten 10 Terme n Summe = 45

Unterschied zwischen calloc () und malloc ()

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 Calloc () - Funktion 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 beträgt 2. Die Anzahl der Argumente ist 1.
Calloc ist langsamer als Malloc. Malloc ist schneller als Calloc.
Es ist nicht sicher im Vergleich zu Calloc. Es ist sicher im Vergleich zu Malloc zu verwenden.
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 macht sie nicht zu Null. Vor dem Zuweisen der Adresse gibt die Funktion Calloc () die Startadresse zurück und setzt sie auf Null.
Es werden keine Speicherinitialisierungen durchgeführt. Es führt eine Speicherinitialisierung durch.

WICHTIGE UNTERSCHIEDE:

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