C-Programmierung

WIE MAN DIE MALLOC-FUNKTION IN C . VERWENDET

WIE MAN DIE MALLOC-FUNKTION IN C . VERWENDET
Malloc ist eine eingebaute Funktion, die in der Header-Datei deklariert ist . Malloc ist die Kurzbezeichnung für 'Memory Allocation' und wird verwendet, um einen einzelnen großen Block zusammenhängenden Speichers entsprechend der angegebenen Größe dynamisch zuzuweisen. Es gibt zwei Arten von statischer und dynamischer Speicherzuweisung. Die statische Speicherzuweisung erfolgt zum Zeitpunkt der Kompilierung und ändert sich zur Laufzeit nicht. Die dynamische Speicherzuweisung weist hierfür zur Laufzeit Speicher zu; wir verwenden malloc. Jetzt kommt es darauf an, woher dieser Speicher kommt, also werden alle dynamischen Anforderungen in C vom Heap-Speicher erfüllt. Grundsätzlich hat unsere Anwendung/unser Programm 3 Arten von Speicher

  • Der Stack-Speicher ist für jede Methode lokal, und wenn die Methode zurückkehrt, wird sie automatisch vom Stack gelöscht automatically.
  • Der globale Speicherbereich weist Speicher für alle globalen Variablen zu. Dieser Speicherbereich wird zu Beginn des Programms erstellt und am Ende automatisch gelöscht.
  • Heap-Speicher ist immer ein Feind, der alle dynamischen Anforderungen des Programms/der Anwendung erfüllt. Immer wenn wir die malloc-Funktion verwenden, wird sie etwas Speicher vom Heap borgen und uns den Zeiger darauf geben.

Syntax:

Die Syntax von malloc ist (void*)malloc(size_t size). Die Syntax sagt also, dass malloc eine Größe erfordert, es wird den Zeiger im Grunde als einen void-Zeiger zurückgeben und die Größe t ist definiert in als vorzeichenlose ganze Zahl. Die Malloc-Funktion weist einfach einen Speicherblock gemäß der im Heap angegebenen Größe zu, wie Sie in der Syntax sehen können, dass die Größe angegeben werden muss, und gibt bei Erfolg einen Zeiger zurück, der auf das erste Byte des zugewiesenen Speichers zeigt, sonst NULL. Die Aufgabe von malloc besteht also darin, zur Laufzeit Speicher zuzuweisen.

Warum void-Zeiger:

Malloc hat keine Ahnung, worauf es zeigt; es bedeutet einfach, dass es nicht weiß, welche Daten an diesem Speicherort gespeichert werden. Es weist lediglich den vom Benutzer angeforderten Speicher zu, ohne die Art der im Speicher zu speichernden Daten zu kennen. Deshalb gibt es einen void-Zeiger zurück.

Malloc ordnet nur Speicher zu, danach liegt es in der Verantwortung des Benutzers, in einen geeigneten Typ umzuwandeln, damit er im Programm richtig verwendet werden kann. Void-Zeiger ist ein Zeiger, der auf jede Art von Daten zeigen kann. Malloc gibt einen Void-Zeiger zurück, da er nicht weiß, welcher Datentyp in diesem Speicher gespeichert wird.

Hier bitten wir malloc, jetzt 6 Byte Speicher zuzuweisen, wenn ein Erfolg malloc einen void-Zeiger zurückgibt. In diesem Fall müssen wir es in einen Zeiger vom Typ Ganzzahl umwandeln, da wir eine Ganzzahl in diesem Speicher speichern möchten. Hier ordnet malloc 6 Byte Speicher in einem Heap zu und die Adresse des ersten Bytes wird im Zeiger ptr . gespeichert.

Beispielprogramm:

Hier ist ein einfaches Beispielprogramm, um das Konzept von malloc richtig zu verstehen.

Hier sehen Sie mit der printf-Funktion, dass ich den Benutzer auffordere, die Anzahl der Ganzzahlen einzugeben. Wir haben zwei Variablen über i und n . deklariert. Variable n ist der Ort, an dem wir die vom Benutzer eingegebene Zahl speichern. Danach haben wir die malloc-Funktion; wir wollen, dass der malloc das Größenäquivalent der Größe von n ganzen Zahlen zuordnet. Wir multiplizieren size if int mit n; dies gibt uns die Größe von n ganzen Zahlen. Danach gibt malloc einen void-Zeiger zurück, und wir wandeln ihn in einen Integer-Zeiger um und speichern die Adresse im ptr-Zeiger. Typecasting ist wichtig, da es sich um eine bewährte Methode handelt.

Wenn der Zeiger NULL enthält, bedeutet dies, dass der Speicher nicht verfügbar ist. Also verlassen wir das Programm einfach mit dem Exit-Fehler-Status. Wenn dies nicht der Fall ist, können wir die for-Schleife einfach ausführen.

Die Schleife läuft von 0 bis n-1, und wir werden den Benutzer bitten, jedes Mal eine ganze Zahl nacheinander einzugeben. Innerhalb der Funktion scanf wird ptr+i geschrieben, da wir wissen, dass ptr die Adresse des ersten Bytes des Speichers enthält. Nehmen wir an, die Adresse ist 1000, hier ist i anfangs gleich Null, also ist 1000+0 1000, also wird unsere erste ganze Zahl innerhalb dieser Adresse gespeichert, wenn ich danach 1 wird, also 1000+1, was intern als (1000) +1 . interpretiert wird *4 wenn ich annehme, dass die Größe der Ganzzahl 4 Byte beträgt und 1004 entspricht, so wird die nächste Ganzzahl an der Stelle 1004 gespeichert. Und das wird so weitergehen die Adressen lauten wie 1000, 1004, 1008 und so weiter. Wir verwenden kein kaufmännisches Und-Zeichen vor ptr+i, da ptr bereits die Adresse angibt, wenn wir ptr schreiben, was einfach ein Zeiger ist und die Adresse enthält, nicht den Wert, daher ist es nicht erforderlich, kaufmännisches Und davor zu setzen, und Dieses Konzept sollte klar sein.

Hier in dieser Schleife machen wir einfach eine Sache, wir drucken alle ganzen Zahlen auf dem Bildschirm aus; offensichtlich verwenden wir ptr+i, aber in diesem Fall dereferenzieren wir es, weil ptr+i eine Adresse darstellt, also müssen wir es dereferenzieren. Wenn i gleich 0 ist, ist es 1000, weil wir annehmen, dass die erste Adresse 1000 ist, also dereferenzieren wir sie; wir erhalten die erste ganze Zahl, dann ist i gleich 1, und es wird 1001, aber als 1004 interpretiert, wenn die Größe der ganzen Zahl 4 . ist. Nochmal. Wir dereferenzieren es, also gibt es uns die 2nd ganze Zahl. Auf diese Weise funktioniert alles.

Dies ist also im Grunde ein einfaches Programm, das Benutzer auffordert, n ganze Zahlen einzugeben, und dann zeigen wir diese ganzen Zahlen einfach auf dem Bildschirm an. Nach dem Ausführen des Programms wird dies angezeigt.

Zuerst bitten wir den Benutzer, die Anzahl der ganzen Zahlen einzugeben, und dann gibt der Benutzer die ganzen Zahlen ein und wir zeigen sie einfach auf dem Bildschirm an.

Fazit:

An dem obigen Programm ist nichts falsch, solange wir es sehr lange fortsetzen. Hier leihen wir Speicher vom Heap, aber wir geben den Speicher nie zurück auf den Heap. Dies geschieht nur in dem Fall, in dem das Programm / die Anwendung dies getan hat für eine lange Dauer wie 24 Stunden laufen. Sie werden die malloc-Funktion erneut aufrufen, und das bedeutet jedes Mal, wenn sie Speicher vom Heap borgen und nie zurückkehren, dies ist schlechte Programmierung, also sollten wir vor der Rückkehr frei schreiben (die Adresse des Speichers, der freigegeben werden soll). Wann immer die Verwendung von malloc free wichtig ist. Durch die Verwendung von malloc haben wir also Speicher gespart, und malloc weist Speicher so groß zu, wie Sie es wünschen.

Glückliche dynamische Speicherzuweisung!

So ändern Sie die Maus- und Touchpad-Einstellungen mit Xinput in Linux
Die meisten Linux-Distributionen werden standardmäßig mit der Bibliothek „libinput“ ausgeliefert, um Eingabeereignisse auf einem System zu verarbeiten...
Weisen Sie Ihre Maustasten mit der X-Mouse Button Control für verschiedene Software unterschiedlich zu
Vielleicht benötigen Sie ein Tool, mit dem sich die Steuerung Ihrer Maus bei jeder von Ihnen verwendeten Anwendung ändern kann. In diesem Fall können ...
Microsoft Sculpt Touch Wireless-Maus Bewertung
Ich habe vor kurzem gelesen, dass Microsoft Sculpt Touch kabellose Maus und beschloss, sie zu kaufen. Nachdem ich es eine Weile benutzt hatte, beschlo...