Was ist der Unterschied zwischen xmalloc und malloc?
Was ist der Unterschied zwischen xmalloc()
und malloc()
für die Speicherzuordnung?
Ist es eine pro mit xmalloc()
?
Kommentar zu dem Problem - Öffnen
malloc()
existiert in standard-C. xmalloc()
nicht. Wo ist das xmalloc()
definierte Funktion? Wo hast du das
xmalloc
? Und der Hauptunterschied zwischen den beiden ist, dass malloc
ist Teil der C-standard und xmalloc
nicht Hier ist ein Beispiel xmalloc: github.com/kanwei/algorithms/blob/...
InformationsquelleAutor der Frage vaichidrewar | 2011-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
xmalloc()
ist ein nicht-standard-Funktion, die das motto Erfolg haben oder sterben. Wenn es scheitert, um Speicher zuzuweisen, es wird beendet Ihr Programm und drucken eine Fehlermeldung zustderr
.Die Zuweisung selbst ist es nicht anders; nur das Verhalten in dem Fall, dass kein Speicher zugewiesen werden können, ist unterschiedlich.
Verwenden
malloc()
, da es mehr freundliche und standard.InformationsquelleAutor der Antwort orlp
xmalloc
ist nicht Teil der standard-Bibliothek. Es ist in der Regel den Namen einer sehr schädlichen Funktion für faule Programmierer, die Häufig in viele GNU-software, die Anrufeabort
wennmalloc
ausfällt. Je nach Programm/Bibliothek, es kann auch umwandelnmalloc(0)
inmalloc(1)
um sicherzustellen, dassxmalloc(0)
gibt eine eindeutige Zeiger.In jedem Fall
abort
ing aufmalloc
Ausfall ist sehr, sehr schlecht Verhalten, vor allem library-code. Eines der berüchtigtsten Beispiele ist der GMP (GNU multiprecision arithmetic library), der bricht die aufrufende Programm, wenn es ausgeführt wird out-of-memory für eine Berechnung.Richtige Bibliothek-level-code sollte immer auch die Zuweisung Ausfälle durch die Unterstützung heraus, was teilweise abgeschlossenen Vorgang war es in der Mitte und einen Fehler-code an den Aufrufer. Das aufrufende Programm kann dann entscheiden, was zu tun ist, das wird wahrscheinlich beinhalten das speichern Kritischer Daten.
InformationsquelleAutor der Antwort R..
Wie andere erwähnt haben, es ist wahr, dass
xmalloc
ist sehr oft umgesetzt, als wrapper-Funktion aufruft, die die OS-geliefertmalloc
blind, fordertabort
oderexit
wenn es fehlschlägt. Allerdings viele Projekte enthalten einenxmalloc
Funktion, die versucht zu retten, den Zustand der Anwendung vor dem beenden (siehe, zum Beispiel, neovim).Persönlich, ich denke, der
xmalloc
als eine Art von Projekt-spezifischen erweitertmalloc
eher als eine verlassenmalloc
. Aber ich erinnere mich nicht, jemals zu sehen, eine version, die nicht wind aufrufenabort
oderexit
haben einige von Ihnen eine viel mehr als das.Also die Antwort auf die Frage "Was ist der Unterschied zwischen
xmalloc
undmalloc
ist: es hängt davon ab.xmalloc
ist ein nicht-standard -, Projekt-spezifische Funktion, so könnte es überhaupt etwas tun. Der einzige Weg, um sicher wissen, ist, den code zu Lesen.InformationsquelleAutor der Antwort evadeflow
einem primitiven Beispiel xmalloc.c in K&R C
dann in deinem code header (Anfang) setzen Sie
#define malloc(m) xmalloc(m)
still zu umschreiben, dass der Quellcode vor der Kompilierung.
(Sie können sehen, die neu geschrieben code durch einen Aufruf
der C-Präprozessor-direkt und speichern Sie die Ausgabe. )
wenn stürzt Ihr Programm ist nicht das, was Sie möchten, können Sie etwas anderes machen
Benutzer nicht genießen Sie den Verlust Ihrer Daten zu einem integrierten crash-Befehl in Ihrem Programm.
InformationsquelleAutor der Antwort spikeysnack
xmalloc
ist Teil von libibertyhttps://gcc.gnu.org/onlinedocs/libiberty/index.html welches ein GNU-utils Bibliothek.
malloc
ist ANSI-C.xmalloc
oft gehört-Quelle in vielen wichtigen GNU-Projekte, einschließlich GCC und Binutils, die beide benutzen es viel. Es ist aber auch möglich, es zu bauen, als eine dynamische Bibliothek zu nutzen, in Ihre Programme. E. g. Ubuntu hat dielibiberty-dev
Paket.xmalloc
ist dokumentiert unter: https://gcc.gnu.org/onlinedocs/libiberty/Functions.html und auf GCC 5.2.0 umgesetzt wird es auf libiberty/xmalloc.cWelche wie andere erwähnt haben, ist ziemlich einfach:
malloc
exit
InformationsquelleAutor der Antwort Ciro Santilli 包子露宪 六四事件 法轮功
Habe ich gesehen, xmalloc während der Arbeit auf IBM AIX.
xmalloc ist ein kernel service von AIX.
Nichts erklären kann, eine Funktion besser als die Funktion die Mann Seite meiner Meinung nach. Also ich bin kopieren Sie den unten details von der Mann-Seite
Zweck: Speicher Reserviert.
Syntax:
caddr_t xmalloc ( Größe, Ausrichtung, heap)
Parameter:
size: Gibt die Anzahl der bytes, die zu reservieren.
align: Gibt die Ausrichtung Merkmale für den zugewiesenen Speicher.
heap : Gibt die Adresse des heap, aus dem der Speicher zugeordnet wird.
Beschreibung:
Den xmalloc kernel-Dienst weist eine Fläche von Speicher aus dem heap angegeben durch die heap-parameter. In diesem Bereich ist die Anzahl der bytes in der angegebenen Länge durch die parameter "Größe" und ist ausgerichtet auf die byte-Grenze angegeben durch den align-parameter. Die align-parameter tatsächlich den Logarithmus zur Basis 2 von der gewünschten Adresse-Grenze. Zum Beispiel, einen align-Wert von 4 fordert, dass die zugewiesenen Bereichs ausgerichtet werden auf eine 2^4 (16) byte-Grenze.
Gibt es mehrere heaps bereitgestellt, durch die der kernel für den Einsatz von kernel-Erweiterungen. Zwei primären kernel-heaps sind kernel_heap und pinned_heap. Kernel-Erweiterungen sollten die kernel_heap Wert bei der Zuteilung von Arbeitsspeicher ist nicht fixiert, und sollten die pinned_heap Wert bei der Zuteilung von Arbeitsspeicher, dass sollte immer fixiert werden, oder merken sich für lange Zeiträume. Bei der Zuteilung aus der pinned_heap heap, die xmalloc kernel service-pin wird der Speicher vor einer erfolgreichen Rückkehr. Die pin und unpin kernel services verwendet werden sollte, um pin und unpin Speicher aus dem kernel_heap heap, wenn der Speicher sollte nur fixiert werden, für eine begrenzte Zeit. Speicher aus dem kernel_heap heap muss aufgehoben werden, bevor zu befreien. Speicher aus dem pinned_heap heap sollte nicht aufgehoben.
Wenn man interessiert ist zu wissen, mehr über diese Funktion kann unter dem folgenden link:
IBM AIX Unterstützung
InformationsquelleAutor der Antwort Albert