malloc() vs. calloc():Hauptunterschiede mit Beispielen erklärt
Bevor wir den Unterschied zwischen malloc und calloc lernen, lasst uns lernen-
Was ist dynamische Speicherzuweisung?
Die dynamische Speicherzuweisung ist ein Prozess der Speicherzuweisung zur Laufzeit. Es gibt vier Bibliotheksroutinen, calloc(), free(), realloc() und malloc(), die verwendet werden können, um Speicher zuzuweisen und ihn während der Programmausführung freizugeben. Diese Routinen sind in der Header-Datei namens stdlib.h.
definiertWas ist malloc() ?
Es ist eine Funktion, die verwendet wird, um einen Speicherblock dynamisch zuzuweisen. Es reserviert Speicherplatz der angegebenen Größe und gibt den Nullzeiger zurück, der auf die Speicherstelle zeigt.
Der zurückgegebene Zeiger ist normalerweise vom Typ void. Das 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 Speicherzuweisung?
- 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 ist eine dynamische Speicherzuweisungsfunktion, die verwendet wird, um den Speicher komplexen Datenstrukturen wie Arrays und Strukturen zuzuweisen. Wenn diese Funktion nicht wie angegeben genügend Speicherplatz zuordnen kann, gibt sie einen Nullzeiger zurück. Die vollständige Form der calloc-Funktion ist eine fortlaufende Zuweisung.
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.
- Verwenden Sie malloc(), wenn Sie mehr Speicher zuweisen müssen als die Größe dieses Stacks.
- Es gibt den Zeiger auf das erste Byte des zugewiesenen Speicherplatzes zurück.
- Es ermöglicht Entwicklern, Speicher so zuzuordnen, wie er benötigt wird, und zwar in der exakten Menge.
- 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 Speicherhaufen 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 genullt 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ückExample: 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.
zugewiesenSyntax 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. Zurückgegeben wird der Zeiger, der aktuell auf dem ersten Byte des belegten Speicherplatzes steht.
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)); } }
Ausgabe:
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. Zuletzt 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; }
Ausgabe:
Bildung und Berechnung der Folgesumme der ersten 10 Terme n Sum =45
Unterschied zwischen calloc() und malloc()
Hier sind wichtige Unterschiede zwischen malloc() und calloc():
malloc() calloc() Die Malloc()-Funktion erstellt einen einzelnen Speicherblock der vom Benutzer angegebenen Größe. Die Calloc()-Funktion kann mehrere Speicherblöcke für eine Variable zuweisen. Die Malloc-Funktion enthält Müllwerte. Der von einer calloc-Funktion zugewiesene Speicherblock wird immer initialisiert Null. Anzahl der Argumente ist 1. Anzahl der Argumente ist 2. Calloc ist langsamer als malloc. Malloc ist schneller als calloc. Es ist im Vergleich zu calloc nicht sicher (). Die Zeiteffizienz ist geringer als bei malloc(). Die Malloc()-Funktion gibt nur die Startadresse zurück und macht sie nicht zu Null. Vor dem Zuweisen der Adresse gibt die Calloc()-Funktion die Startadresse zurück und macht sie zu Null. Sie führt keine Initialisierung durch des Speichers. Es führt eine Speicherinitialisierung durch.WICHTIGE UNTERSCHIEDE:
- Die malloc()-Funktion gibt nur die Startadresse zurück und macht sie nicht zu Null. Andererseits gibt die calloc()-Funktion die Startadresse zurück und macht sie zu Null.
- In der malloc-Funktion ist die Anzahl der Argumente 1, während in der calloc-Funktion die Anzahl der Argumente 2 ist.
- Die Zeiteffizienz von malloc() ist höher als die von calloc(), während malloc() im Vergleich zu calloc() nicht sicher ist
- malloc initialisiert keinen Speicher, während calloc die Speicherinitialisierung durchführt.
C Sprache
- C#-Ausdrücke, -Anweisungen und -Blöcke (mit Beispielen)
- C++ do…while-Schleife mit Beispielen
- C++-Zeiger mit Beispielen
- C++ Char-Datentyp mit Beispielen
- Überladen von C++-Operatoren mit Beispielen
- C++ Funktionen mit Programmbeispielen
- Tutorial zu C#-Sammlungen mit Beispielen
- Unterschied zwischen while und do-while:An Beispielen erklärt
- calloc()-Funktion in der C-Bibliothek mit Programm BEISPIEL
- Python String count() mit BEISPIELE