Bei der dynamischen Zuordnung ist ein Speicherraum einer bestimmten Größe zur Laufzeit für den exklusiven Gebrauch durch den Prozess reserviert, der ihn zuteilt.
Die C -Sprache hat mehrere komplementäre Funktionen für die dynamische Speicherverwaltung. Die am häufigsten implementierten sind malloc (), realloc () und free (), die Teil der Standardbibliothek sind und in der „stdlib.H ”Kopfball. Diese drei Funktionen weisen den Speicher einem Prozess zu, ändern seine Größe und befreien ihn erneut.
Bei der Programmierung ist es sehr wichtig, den dynamischen Speicher strikt zu verwalten, da wir jedes Mal, wenn wir die Ressourcen einem Programm zuweisen. Das Missmanagement des dynamischen Gedächtnisses kann katastrophale Konsequenzen für die Prozesse haben, die zu diesem Zeitpunkt im System ausgeführt werden.
In diesem Linux -Hinweis -Artikel erfahren Sie, wie Sie die Free () -Funktion verwenden, die eine der drei grundlegenden Funktionen ist, die die C -Sprache für eine dynamische Speicherverwaltung bietet, die die zugewiesenen Ressourcen befreit und an das Betriebssystem zur Wiederverwendung zurückgibt.
Wir zeigen Ihnen die Syntax und die Beschreibung, wie es funktioniert. Anschließend werden wir die Verwendung der Free () -Funktion in praktischen Beispielen mit Code -Snippets und Bildern implementieren, die ihre Verwendung und ihre Auswirkungen auf das System demonstrieren.
Syntax der Free () -Funktion in der C -Sprache
void frei (void *ptr);
Beschreibung der Free () -Funktion in der C -Sprache
Die Free () -Funktion befreit eine bestimmte Menge an dynamisch zugewiesenen Speicher.
Der dynamische Speicher wird zugewiesen, indem die Funktion malloc () aufgerufen und die Größe in Bytes des Bereichs angegeben wird, den Sie in seinem Eingabebuchargument zuordnen möchten. Infolgedessen gibt diese Funktion den "PTR" -Zeiger zurück, der auf den neu zugewiesenen Bereich verweist.
Die Free () -Funktion frei. Diese Funktion gibt keine Ergebnisse zurück und hat keine Fehlerdefinition in der „Errno.H" Header.
Die Free () -Funktion ist Teil der Standardbibliothek und ist in der definiert “Stdlib.H" Header. Um es und die anderen dynamischen Speicherverwaltungsfunktionen zu verwenden, müssen Sie diesen Header wie folgt in Ihren Code aufnehmen:
#enthalten
So befreien Sie den dynamisch zugewiesenen Speicher mithilfe der Funktion Free ()
In diesem Beispiel erstellen wir eine sehr einfache Konsolenanwendung, mit der wir die Kontrolle über die Zuordnung des Speichers mit der MALCOC () -Funktion und der Befreiung des Speichers mit der Funktion Free () erstellen können. Anschließend kompilieren wir den Code und führen die Anwendung aus, überwachen das System und beobachten die Effekte.
Um die Konsolenanwendung zu erstellen, schließen wir zunächst die erforderlichen Header ein und öffnen eine Main () -Funktion mit einer leeren Rückgabe. Wir deklarieren den "PTR" -Zeiger, der in den Funktionen von Malloc () und Free () für die Zeiger auf die zugewiesenen Speicherbereiche verwendet wird. Wir deklarieren auch die Ganzzahlgröße, die die Größe des zugewiesenen Speichers und die Ganzzahloption bestimmt, die die Bedingung für den Switch ist, mit dem wir die Menüoption auswählen können.
Sobald die erforderlichen Variablen deklariert sind, zeigt die Anwendung ihre PID mithilfe der Funktionen printf () und getPid () an. Dann fährt das Programm in eine unendliche Schleife ein, in der ein Menü mit zwei Optionen angezeigt wird. Das von Benutzer ausgewählte Element wird mit der Funktion scanf () in der Ganzzahloption abgerufen und ist die Bedingung für einen Schalter mit zwei Fällen, eine für jede Option.
Die Option 1 ruft die malloc () -Funktion auf, die dem Prozess einen 122 MB -Speicherblock zuweist. Während die Option 2 diesen Block befreit, indem die Funktion free () aufgerufen wird. Sie können den vollständigen Code dieser Anwendung in der folgenden Abbildung sehen:
#enthalten
#enthalten
#enthalten
#enthalten
void main ()
intoption;
char *ptr;
int size = 64000000;
printf ("\ nprocess id: %i \ n", getPid ());
während (1)
printf ("\ n [1] Speicher zuweisen.\ n [2] Speicher veröffentlichen.\N");
scanf ("%i", & Option);
Switch (Option)
Fall 1:
printf ("\ nalocating Memory… \ n");
Ptr = malloc (Größe*sizeof (char));
brechen;
Fall 2:
printf ("\ nreleassing Memory… \ n");
frei (ptr);
brechen;
// Endschalter
// Ende während (1)
Beachten. In Fall 2 verwendet die Funktion Free () denselben Zeiger wie Eingabeargument, um den zugewiesenen Speicher zu befreien.
Um die Auswirkungen dieser beiden Funktionen auf das System zu sehen, müssen wir zwei Befehlskonsolen öffnen. In Terminal 1 führen wir den Top -Befehl aus, um die Ressourcen anzuzeigen, die von jedem Systemprozess verwendet werden. In Terminal 2 kompilieren und führen wir die Anwendung aus, die wir gerade gesehen haben.
Sobald die Anwendung ausgeführt wird, betrachten wir die Konsole 1 für die Ressourcen, die vom Prozess verwendet werden, dessen PID in Konsole 2 angezeigt wird.
Wie wir in der Abbildung sehen können, hat das System dem Prozess PID -Nummer 13009 zugewiesen. Wir können in Spalte 10 des linken Terminals sehen, dass unsere Anwendung weniger als 0 verbraucht.1% des Systemspeichers.
Wenn wir die Option 1 unserer Anwendung auswählen und "Eingabetaste" drücken, verteilt die Funktion malloc () dem Prozess 122 MB Speicherspeicher.
Wie wir in diesem Bild sehen können, ist der Speicher, der von unserer Anwendung verwendet wird.6% des Gesamtspeichers, der im System verfügbar ist.
Jetzt wählen wir Option 2 unserer Anwendung aus. Diese Aktion frei.
In diesem Bild können wir sehen, wie die Free () -Funktion den zugewiesenen Speicher aus 3 befreit hat.6% bis 0.1% des gesamten Systems, das von unserer Anwendung verwendet wird.
Abschluss
In diesem Linux -Hinweis -Artikel haben wir Ihnen gezeigt, wie Sie die Funktion Free () verwenden, um den dynamisch zugewiesenen Speicher zu befreien. Wir haben uns die Syntax dieser Funktion und die theoretische Beschreibung der Funktionsweise angesehen.
Anschließend haben wir das angewendet, was wir in einem praktischen Beispiel mit Code -Ausschnitten und Bildern gelernt haben, in denen wir eine Konsolenanwendung erstellt haben. Wir haben es Schritt für Schritt ausgeführt und das System überwacht, um die Auswirkungen des Aufrufens der Funktionen zu sehen, um den Systemspeicher zuzuweisen und zu befreien.