mmap vs malloc
In C gibt es dynamischen Speicher, und dies weist auf die Speicherzuordnung in der Programmiersprache C durch eine Reihe von Funktionen in der C-Standardbibliothek hin. Eines davon ist malloc, was sich auf die Speicherzuordnung bezieht. Im UNIX-System gibt es mmap, was sich auf ein System mit Speicherzuordnung bezieht, das über eine eigene eindeutige E / A verfügt. Diese beiden Funktionen (mmap und malloc) erfüllen beim Nennwert die gleiche Funktion, bei näherer Betrachtung lassen sich jedoch einige Unterschiede feststellen. Diese Unterschiede, die sich aus der Funktionalität ergeben, werden im Folgenden beschrieben.
Unterschiede
Zunächst ist es wichtig festzustellen, ob Anhaltspunkte dafür vorliegen, dass der verfügbare Speicher erheblich gedrosselt wird. Dies erfolgt durch Messung der Programmleistung gegen die 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, werden alle verfügbaren Systemeinrichtungen erfasst. Zusätzliche Systemeinrichtungen können über den Kernel mobilisiert werden. Dies ist eine der Speicherverwaltungsstrategien, die Systeme verwenden, um sicherzustellen, dass eine zufriedenstellende Speicherzuordnung vorliegt. Der Prozess ist jedoch nicht unkompliziert und wurde aus dem einzigen Grund kompliziert, nur weil er verhindert, dass Leute einfache Programme erstellen, die die Speicherzuordnung desorganisieren und somit zu einer schlechten Leistung führen können.
'mmap' ist dagegen ein Systemaufruf, der die Verantwortung übernimmt und den Kernel auffordert, eine ungenutzte und zusammenhängende Region in einer Anwendungsadresse zu finden, die groß genug ist, um mehrere Speicherseiten abzubilden. Es gibt auch die Schaffung von Verwaltungsstrukturen für virtuellen Speicher, die in der Tat nicht zu einem Segfault führen können.
Malloc funktioniert im Allgemeinen in den meisten Speicherverwaltungsprozessen. Falls das Programm zusätzlichen Speicherplatz benötigt, wird dieser vom Betriebssystem ausgeliehen. Auf der anderen Seite verwendet Mmap einen Kontextwechsel, der in Kernel-Land konvertiert.
Malloc eignet sich am besten für die Speicherzuweisung in allen Anwendungen, die auf dem System ausgeführt werden, im Gegensatz zu mmap. Dies ist standardmäßig erforderlich, außer in besonderen Fällen, in denen dies zulässig sein kann.
Mmap kann verwendet werden, um die Antwort von Anwendungen zu beschleunigen. Dies ist jedoch nicht ratsam, da letztendlich einige Bytes für Seiten geopfert werden, damit die Anwendung problemlos ausgeführt werden kann. Obwohl der Dateninhalt anfangs klein erscheint, kann die Extrapolation, wenn zahlreiche Anwendungen ausgeführt werden sollen, das System sogar noch verlangsamen.
Nach der Messung der Leistung und der Nutzung der Ressourcen sollte eine gründliche Bewertung der Datennutzung aller auf dem System laufenden Anwendungen durchgeführt werden. Wenn die Lebensdauer der laufenden Anwendungen angezeigt werden kann, kann es besser werden.
Die Verwendung von mmap zur Speicherzuordnung hat den Nachteil, dass die Zuordnung und Freigabe von Daten in Chunks teuer ist. Dies ist darauf zurückzuführen, dass die Daten in zahlreiche Bereiche aufgeteilt sind und dass mmap Systemanrufe nicht zulässt.
Mmap ist gegenüber malloc von Vorteil, da der von mmap belegte Arbeitsspeicher sofort an das Betriebssystem zurückgegeben wird. Der von malloc belegte Speicher wird nur zurückgegeben, wenn ein Datensegmentbruch vorliegt. Dieser Speicher wird speziell für die Wiederverwendung aufbewahrt.
Zusammenfassung
'malloc' steht für Hauptspeicherzuweisungspunkt
Ein mmap-System ruft einen Kernel auf und fordert einen Kernel an, um ungenutzte Bereiche in Anwendungsadressen zu finden, die die Zuordnung mehrerer Speicherseiten ermöglichen
Mmap wird für die Zuweisung von Speicher nicht empfohlen, da der verfügbare Speicher aufgeteilt wird und keine Systemaufrufe möglich sind
Ein Vorteil von mmap gegenüber Malloc ist die Verfügbarkeit von Speicher im Gegensatz zu Malloc-Speicher, der wiederverwendet wird.