Differenz zwischen mmap und malloc Unterschied zwischen

Anonim

mmap vs malloc verweist

In C gibt es einen dynamischen Speicher, der auf die Speicherzuweisung in der C-Programmiersprache durch eine Reihe von Funktionen in der C-Standardbibliothek verweist. Eine davon ist malloc, was sich auf die Speicherzuweisung bezieht. Im UNIX-System gibt es mmap, was sich auf ein Speicherabbildungssystem bezieht, das mit einer eigenen eindeutigen I / O versehen ist. Diese zwei (mmap und malloc) werden auf den Nennwert die gleiche Funktion ausführen, aber weitere Überprüfung zeigt einige Unterschiede. Diese Unterschiede, die sich aus der Funktionalität ergeben, sind nachstehend aufgeführt.

Unterschiede

Zunächst muss festgestellt werden, ob es Anhaltspunkte dafür gibt, dass der verfügbare Speicher signifikant gedämpft wird. Dies geschieht durch die Messung der Leistung des Programms gegen Speicherverwaltung.

Die Hauptspeicherzuweisungsschnittstelle ist malloc. Dies ist der größte in der C-Bibliothek. Ein Teil des darin enthaltenen Verwaltungscodes ist mmap. Wenn malloc ausgeführt wird, sammelt es alle verfügbaren Systemfunktionen. Zusätzliche Systemeinrichtungen können durch den Kernel mobilisiert werden, was eine der Speicherverwaltungsstrategien ist, die Systeme verwenden, um sicherzustellen, dass eine ausreichende Speicherzuweisung erfolgt. Der Prozess ist jedoch nicht einfach und wurde aus dem alleinigen Grund kompliziert, dass Menschen daran gehindert werden, einfache Programme zu erstellen, die die Speicherzuordnung desorganisieren und somit eine schlechte Leistung erzeugen können.

'mmap' andererseits ist ein Systemaufruf, der die Verantwortung übernimmt und den Kernel anweist, eine unbenutzte und zusammenhängende Region in einer Anwendungsadresse zu finden, die groß genug ist, um die Zuordnung mehrerer Seiten zu ermöglichen der Erinnerung. Es gibt auch die Schaffung von virtuellen Speicherverwaltungsstrukturen, die tatsächlich nicht zu einem Segfault führen können.

Malloc funktioniert im Allgemeinen in den meisten Speicherverwaltungsprozessen. Falls das Programm zusätzlichen Speicher benötigt, wird dies vom Betriebssystem ausgeliehen. Mmap verwendet andererseits einen Kontextwechsel, der in Kernel-Land konvertiert.

Malloc eignet sich am besten für die Zuweisung von Speicher in jeder Anwendung, die auf dem System ausgeführt wird, im Gegensatz zur Verwendung von mmap. Dies ist standardmäßig erforderlich, außer in besonderen Fällen, in denen dies zulässig ist.

Mmap kann verwendet werden, um die Reaktion von Anwendungen zu beschleunigen. Dies ist jedoch nicht ratsam, da es am Ende einige Bytes für Seiten opfert, damit die Anwendung reibungslos läuft. Obwohl der Dateninhalt am Anfang klein erscheinen mag, kann die Extrapolation, wenn zahlreiche Anwendungen ausgeführt werden sollen, das System sogar noch weiter verlangsamen.

Nach der Messung der Leistung und der Nutzung von Ressourcen sollte eine gründliche Auswertung der Datennutzung durch alle auf dem System ausgeführten Anwendungen durchgeführt werden.Wenn die Lebenszeiten der laufenden Anwendungen gezeigt werden können, kann es besser werden.

Die Verwendung von mmap für die Speicherzuweisung hat den Nachteil, dass die Zuordnung und Freigabe von Daten in Blöcken teuer ist. Dies liegt daran, dass die Daten in zahlreiche Bereiche aufgeteilt sind und mmap auch davon abhält, Systemaufrufe zu tätigen.

Mmap ist gegenüber malloc von Vorteil, da der von mmap belegte Speicher sofort an das Betriebssystem zurückgegeben wird. Der von malloc verbrauchte Speicher wird nur zurückgegeben, wenn ein Datensegmentbruch vorliegt. Dieser Speicher wird speziell aufbewahrt, um wiederverwendet zu werden.

Zusammenfassung

'malloc' steht für Hauptspeicher-Zuweisungspunkt

Ein mmap-System ruft einen Kernel auf, um nicht verwendete Bereiche in Anwendungsadressen zu finden, die mehrere Speicherseiten abbilden können.

Mmap wird nicht empfohlen Zuweisen von Speicher, da dieser den verfügbaren Speicher aufteilt und keine Systemaufrufe durchführen kann

Ein Vorteil von mmap gegenüber malloc ist die Verfügbarkeit von Speicher, im Gegensatz zu malloc-Speicher, der wiederverwendet wird.