Empfohlen, 2024

Tipp Der Redaktion

Unterschied zwischen Malloc und Calloc

Der grundlegende Unterschied zwischen Malloc- und Calloc-Funktion besteht darin, dass calloc () zwei Argumente anstelle eines von malloc () benötigten Arguments benötigt. Sowohl malloc () als auch calloc () sind die Funktionen, die die Programmiersprache C für die dynamische Speicherzuweisung und -deplikation zur Laufzeit bereitstellt.

Bevor Sie die Funktionen malloc () und calloc () verstehen, sollten Sie zunächst die Bedeutung der dynamischen Speicherzuordnung verstehen. Speicherzuordnung ist die Zuweisung des Computerspeichers für die Ausführung von Programmen und Prozessen. Wir verwenden dynamische Zuordnungstechniken, wenn nicht bekannt ist, wie viel Speicherplatz für das Programm und den Prozess benötigt wird.

Die dynamische Speicherzuordnung entsteht aufgrund der Probleme, die mit der statischen Speicherzuordnung verbunden sind, beispielsweise wenn weniger Elemente gespeichert werden, dann wird der Rest des Speichers unnötig verschwendet. Daher werden die Probleme der statischen Speicherzuordnung beseitigt, bei denen Speicher nur dann zugewiesen wird, wenn er benötigt wird.

Vergleichstabelle

VergleichsbasisMalloc ()calloc ()
Nein von BlöckenWeist einem einzelnen Speicherblock den erforderlichen Speicherplatz zu.
Weist mehrere Blöcke des angeforderten Speichers zu.
Syntaxvoid * malloc (size_t size);void * calloc (size_t num, size_t size);
Initialisierungmalloc () löscht und reserviert den zugewiesenen Speicher nicht.Der zugewiesene Speicher wird mit calloc () auf null gesetzt.
ZuteilungsartDie Funktion malloc () reserviert Speicher der Größe 'size' aus dem Heap.Die Funktion calloc () weist Speicher zu, dessen Größe der Anzahl * entspricht.
GeschwindigkeitSchnellVergleichsweise langsam

Definition von malloc ()

Die Malloc- Funktion weist einen Speicherblock in Byte zu . Der Benutzer sollte die Blockgröße explizit angeben, die für die Verwendung erforderlich ist.

Durch ein Malloc-Funktionsprogramm fordert das RAM des Systems die Zuweisung des Speichers an, wenn die Anforderung eingeräumt wird (dh die Malloc-Funktion sagt, dass der Speicher erfolgreich zugeordnet wurde), gibt sie einen Zeiger auf den ersten Speicherblock zurück. Es wird ein ungültiger Zeigertyp zurückgegeben, dh jeder Zeigertyp kann zugewiesen werden.

Es wird jedoch NULL zurückgegeben, wenn die Malloc-Funktionen nicht die erforderliche Speichermenge zuordnen können. Auf die malloc-Funktion kann in TURBO C, Headerdatei alloc.h oder stdlib.h, alloc.h UNIX ist sie in der Headerdatei verfügbar .

SYNTAX

Die Syntax dieser Funktion lautet wie folgt:

malloc(number of elements * size of each element);

zum Beispiel,
int *ptr;
ptr=malloc(10*sizeof (int))

Dabei steht size für die Größe des Speichers in Byte (dh die Anzahl der zusammenhängenden Speicherplätze, die zugeordnet werden sollen).

Wie bereits erwähnt, gibt die Funktion malloc jedoch einen ungültigen Zeiger zurück. Daher ist ein Umwandlungsoperator erforderlich, um den zurückgegebenen Zeigertyp je nach Bedarf zu ändern. Die obige Deklaration könnte in der folgenden Form dargestellt werden:

ptr_var=(type_cast* ) malloc (size)

Wenn ptr_var der Name des Zeigers ist, der die Startadresse des zugewiesenen Speicherblocks type_cast ist type_cast der Datentyp, in den der zurückgegebene Zeiger (oder Typ void) zu transformieren ist, und die Größe beschreibt die Größe des zugewiesenen Speicherblocks in Byte .

Zum Beispiel:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Speicher, der von der Malloc-Funktion zugewiesen wird, enthält Speicherwert.

Beachten Sie Folgendes, um zu überprüfen, ob die entsprechende Anforderung von malloc generiert wird, um den vom System-RAM zugewiesenen Speicher zuzuweisen, oder abgelehnt wird (falls der erforderliche Speicherplatz nicht verfügbar ist). Wir können von der Eigenschaft Gebrauch machen, in der die benötigte Speichermenge nicht zugewiesen wird. Die Malloc-Funktion gibt NULL zurück.

Definition von calloc ()

Die Calloc- Funktion arbeitet genau wie die Malloc- Funktion, nur dass zwei Argumente erforderlich sind, da bei malloc () nur ein Argument erforderlich ist.

Zum Beispiel:
int*ptr;
ptr = (int*)calloc(10, 2);

Hier gibt 2 die Größe des Datentyps in einem Byte an, für das die Zuordnung vorgenommen werden soll. In diesem Fall ist dies 2 für Ganzzahlen. Und 10 gibt die Anzahl der Elemente an, für die eine Zuordnung erfolgen soll.

Denken Sie daran, dass das an die Funktion malloc übergebene Argument (n * 10) war. Dies ist ein einzelnes Argument, das nicht verwirrt werden sollte, da mehrere Argumente immer durch Kommas getrennt werden. Das Argument (n * 10) enthält keine Kommas. Es ist also ein einziges Argument, obwohl kein einfaches, sondern ein Ausdruck.

Um auf die obige Deklaration zurückzukommen, wird nach der Ausführung der obigen Anweisung ein Speicherblock von 20 Bytes dem anfordernden Programm zugewiesen, und die Adresse des ersten Blocks wird dem anfordernden Programm zugewiesen, und die Adresse des ersten Blocks wird dem Zeiger zugewiesen ptr.

Der von der Calloc-Funktion zugewiesene Speicher enthält alle Nullen. Die Calloc-Funktion ist auch in der Header-Datei verfügbar oder in TURBO C.

Hauptunterschiede zwischen Malloc und Calloc

Die Hauptunterschiede zwischen Malloc- und Calloc-Funktionen sind:

  1. Ein einzelner angeforderter Speicherblock wird in malloc zugewiesen, während mehrere angeforderte Speicherblöcke per Calloc zugewiesen werden.
  2. Die Malloc-Funktion löscht den zugewiesenen Speicher nicht und initialisiert ihn. Es enthält einen Abfallwert und die Position des zugewiesenen Speichers kann nicht geändert werden. Im Gegensatz dazu initialisiert calloc den zugewiesenen Speicher auf null.
  3. malloc ist schneller als calloc, da im Calloc zusätzliche Initialisierungsschritte erforderlich sind, der Unterschied ist jedoch vernachlässigbar.
  4. Ein weiterer Unterschied zwischen diesen beiden besteht darin, dass calloc ein malloc + memset ist. Memset weist die physischen Seiten im Speicher zu, während malloc nur den Speicher aus dem Heap in der virtuellen Adresse zuweist.

Fazit:

Sowohl die Malloc- als auch die Calloc-Funktion werden für die Zuweisung des Speichers verwendet und haben ihren bestimmten Vorteil, und Nachteile wie Malloc sind im Vergleich zu Calloc schnell. Darüber hinaus ist malloc einfacher zu verwenden, da nur ein Argument benötigt wird, da calloc Speicher belegt und den Speicherbereich mit NULL initialisiert. Sie würden jedoch Calloc bevorzugen, wenn die Variableninitialisierung für Sie wichtiger ist.

Top