Unterschied zwischen malloc und realloc in der C -Programmierung

Unterschied zwischen malloc und realloc in der C -Programmierung
Der malloc () und der realloc (); Beide Funktionen werden für die dynamische Speicherzuweisung verwendet, und in diesem Artikel werden wir den Vergleich beider diskutieren. Realloc () und malloc () funktionieren im Detail. Bevor wir diese Funktionen jedoch verstehen, diskutieren wir den Unterschied zwischen statischem und dynamischem Speicher in der C -Programmierung.

Bei der C -Programmierung nimmt es beim Ausführen eines Programms einen Speicher auf dem System ein. Wenn wir den statischen Speicher verwenden, müssen wir einen festen Speicherblock aus dem System zuweisen. Nach der Ausführung des Programms können zwei Szenarien stattfinden. Das Programm benötigt entweder eine größere Blockgröße als die festgelegte Größe oder es benötigt den Speicherblock mit kleinerer Größe. Wenn der Speicherblock für das ausgeführte Programm geringer wird, sind die Ergebnisse nicht genau und wenn die Blockgröße für das ausgeführte Programm größer ist, ist der verbleibende freie Speicher des Blocks nicht verwendet.

Um dies zu vermeiden, wird es bevorzugt, dynamisches Speicher in der C -Programmierung zu verwenden, die unterschiedliche Funktionen aufweist.

Was ist eine malloc () -Funktion in der C -Programmierung

Wenn wir in der C -Programmierung den statischen Speicher verwenden, können wir die Speichergröße während der Ausführung des Programms nicht ändern. Es ist eine empfohlene Praxis, den dynamischen Speicher in der C -Programmierung zu verwenden, damit die Speichergröße während der Ausführung des Programms verändert werden kann.

Für die Verwendung des dynamischen Speichers müssen wir eine Header -Datei einfügen “Stdlib.H", Dies enthält alle Funktionen des dynamischen Speichers. Der Malloc () ist auch Mitglied von STDLIB.h Bibliothek und wird verwendet, um dem ausgeführten Programm Speicher zuzuweisen. Wenn eine malloc () -Funktion in einem Programm aufgerufen wird, sendet sie eine Anforderung an den Haufen des Systems, der entweder den angeforderten Speicherblock an die MALCOC () -Funktion zuweist oder einen Nullwert zurückgibt, wenn nicht genügend Speicherplatz auf der Haufen.

Der Malloc () fordert den Speicherblock nach dem Bedarf des ausgeführten Programms an. Wenn das Programm erfolgreich ausgeführt wird von anderen Anweisungen.

Die allgemeine Syntax der malloc () -Funktion lautet:

ptr_name = (cast-type*) malloc (Größe);

Die Erklärung zur obigen Syntax ist einfach:

  • Wir können einen beliebigen Namen für den Zeiger verwenden (Zeiger werden verwendet, um Adressen zu speichern)
  • Dann müssen wir den Datentyp oder den Gusstyp für den Zeiger wie int und char deklarieren
  • Und schließlich mit der malloc () -Funktion und in der Funktion müssen wir die benötigte Speichergröße erwähnen

Für ein besseres Verständnis werden wir ein Beispiel in Betracht ziehen, eine Datei mit dem Namen von erstellen mal_txt.C und geben Sie das folgende Skript ein:

#enthalten
#enthalten
int main ()
int a = 4, i, *ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ nError! Speicher nicht zugewiesen.");
exit (0);

printf ("\ nenter Elemente von Array:");
für (i = 0; i< a; ++i)
scanf ("%d", ptr + i);
s + = *(ptr + i);

printf ("\ nsum: %d", s);
printf ("\ n");
Rückkehr 0;

Um den Mal_txt zu kompilieren.c Datei verwenden wir den GCC -Compiler:

$ GCC MAL_TXT.c -o mal_txt

Wenn die Datei ohne Fehler erfolgreich zusammengestellt wurde, führen Sie den Code mit dem Befehl aus:

$ ./mal_txt

Im obigen Code erstellen wir das Array und drucken die Summe der Elemente des Arrays. Eine detaillierte Erklärung des obigen Programms lautet:

  • Wir haben die beiden Bibliotheken aufgenommen; stdlib.H für die Verwendung dynamischer Speicherfunktionen und Stdio.H für die Eingangs- und Ausgangsfunktionen
  • Wir haben vier Variablen A, S, I und *P deklariert, in denen „ *“ mit „P“ verwendet wird, weil es ein Zeiger ist und den Ort anstelle von Variablen speichert
  • Wir haben die malloc () -Funktion verwendet und die Größe einer Variablen „A“ verwendet, was bedeutet zugewiesen
  • Dann haben wir die "if Anweisung" verwendet, wenn der Heap nicht genügend Speicher hatte, wird der Nullwert zurückgegeben, in diesem Fall einfach den "Fehler" anzuzeigen! Speicher nicht zugewiesen.Verwenden Sie die Funktion printf ()
  • Wenn der Speicher zugewiesen wird, wird mit Hilfe der Funktion scanf () vier Elemente vom Benutzer abgenommen, berechnen Sie die Summe und speichern Sie sie in „S“
  • Schließlich wird der Wert von „S“ angezeigt, der die Summe aller Elemente des Arrays ist

Was ist eine Realloc () -Funktion in der C -Programmierung

Eine weitere Funktion des dynamischen Speichers ist die Funktion von Realloc (), die zum Ändern des Speicherblocks, der der MALDOC () -Funktion zugewiesen wurde. Die oben beschriebene malloc () -Funktion fordert einen Speicherblock aus dem Heap angefordert, um die Größe des Speicherblocks zu ändern.

Die Realloc () -Funktion ist die Kurzform der „Neuzuweisung des Speichers“ und wird verwendet, um die Größe der Speicherblockgröße zu ändern, die vom Heap an malloc () oder calloc () -Funktion zugewiesen wird. Es stört nicht den ursprünglichen Inhalt des Speicherblocks und fordert den neuen Speicherblock vom Heap an und kopiert alle Daten aus dem alten Speicherblock zum neuen Speicherblock, ohne einen Inhalt davon zu stören.

Die allgemeine Syntax der Verwendung der Realloc () -Funktion lautet:

$ ptr = realloc (PTR, Newssize);

Die Erklärung der obigen Syntax ist:

  • Verwenden Sie die Zeigervariable, die mit der malloc () -Funktion verwendet wird
  • Verwenden Sie die Realloc () -Funktion mit den Parametern; Zeigername und neue Größe, die Sie zuweisen möchten

Auch hier erstellen wir eine Datei, real_file.C, und schreiben Sie den Code darin, um die Verwendung der Realloc () -Funktion besser zu verstehen:

#enthalten
#enthalten
int main ()
int *ptr;
ptr = malloc (200);
if (ptr == null)
printf ("Der Speicher wird nicht zugewiesen.");
exit (0);

ptr = realloc (ptr, 400);
if (ptr!= Null)
printf ("Speicher hat erfolgreich \ n" zugewiesen);
Rückkehr 0;

Kompilieren Sie nun die Real_file.C mit dem GCC -Compiler:

$ gcc real_file.c -o real_file

Wenn die Datei erfolgreich zusammengestellt wird, führen Sie das Programm mit dem Befehl aus:

$ ./real_file

Die Erklärung des obigen Skripts lautet:

  • Wir haben zwei Header -Dateien aufgenommen. stdlib.H für die dynamischen Speicherfunktionen und Stdio.H für die Eingangs- und Ausgangsfunktionen
  • Deklarierte Zeigervariable *ptr
  • Verwendete die malloc () -Funktion und forderte den Heap auf, 200 Bytes zuzuweisen. Wenn der Speicher nicht vom Heap zugewiesen wird, wird der Speicher nicht zugewiesen.”Wird mit der Funktion printf () angezeigt
  • Wenn der Speicher zugewiesen ist, kommt er zur Funktion von Realloc () und der Größe des Speichers von 100 Bytes bis 400 Bytes
  • Wenn der Haufen es 500-Byte-Speicher zugewiesen hat; Es zeigt die („Speicher hat erfolgreich erstellt“ angezeigt)

Abschluss

Bei der C -Programmierung ist die dynamische Speicherzuweisung die manuelle Zuordnung des Speichers gemäß den Programmanforderungen. Die Funktionen Malloc () und Realloc () sind Teil des dynamischen Speichers; Malloc () wird für die Speicherzuordnung verwendet und Realloc () wird für die Neuzuweisung des Speichers verwendet. In dieser Beschreibung haben wir beide erklärt; Malloc () und Realloc () Funktionen, wie sie funktionieren und was ist die allgemeine Syntax, beide zu verwenden. Zum besseren Verständnis haben wir die Beispiele für beide Funktionen ausgeführt.