In Windows, in neueren Versionen von MSVC, malloc (und C++ new
, da es mit den gleichen Grundlagen für den eigentlichen Speicherzuweisungsteil von new
implementiert wird ) ruft HeapAlloc()
auf . In anderen Versionen, wie z. B. g++ mingw, ist die C-Laufzeit eine ältere Version, die HeapAlloc
nicht ganz so direkt aufruft , aber an der Basis geht es immer noch zu HeapAlloc
- Um etwas anderes zu finden, müssen wir zu Windows vor 95 zurückkehren, das einen GlobalAlloc
hatte und LocalAlloc
Satz von Funktionen - aber ich glaube nicht, dass die Leute heutzutage 16-Bit-Compiler verwenden - zumindest nicht für die Windows-Programmierung.
Unter Linux, wenn Sie glibc
verwenden , hängt es von der Größe der Allokation ab, ob sbrk
aufgerufen wird oder mmap
- mmap
(mit MAP_ANONYMOUS
in den Flags) wird für größere Zuweisungen verwendet (über einem Schwellenwert, von dem ich glaube, dass er in der typischen Implementierung bei 2 MB liegt)
malloc() und Co. werden als Teil des Laufzeitsystems betrachtet, das mit einem Compiler geliefert wird. Daher kann und wird jeder Compiler unterschiedliche OS-Aufrufe verwenden, um malloc.
zu implementierenWie andere gesagt haben, sind die Optionen unter Linux sbrk() und mmap().
Unter Windows sind die Optionen HeapAlloc() und VirtualAlloc().
Meine Frage ist, wie wird malloc in den folgenden Betriebssystemen implementiert?
Unter Linux gibt es zwei berühmte malloc
Implementierungen:
dlmalloc (Malloc von Doug Lea)
ptmalloc
Unter Linux implementieren libc wie glibc, eglibc oder newlib ptmalloc oder eine Variante von ptmalloc.
Was sind die betriebssystemspezifischen Funktionen, die aufgerufen werden/Implementierungen von malloc()?
Auf Unix- und Linux-Systemen sbrk
und mmap
Systemaufrufe verwendet werden. Siehe man 2 sbrk
und man 2 mmap
für weitere Informationen.
In Ordnung, bei Linux bin ich mir nicht sicher, aber bei Windows...
Speicher kann an zwei kategorisierten Orten zugewiesen werden.
1) Heaps (Process Heap, Custom Created Heaps) siehe -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspxunter Verwendung von Funktionen wie HeapAlloc &HeapFree. LocalAlloc und LocalFree können als „Abkürzungen“ zu HeapAlloc verwendet werden, wenn Sie im Standardprozess-Heap zuweisen möchten.
2) Virtueller Speicher (normalerweise nur prozessspezifisch aufgrund von Zugriffsbeschränkungen im globalen virtuellen Speicher aus Sicherheitsgründen), unter Verwendung von VirtualAlloc, VirtualFree. siehe -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx
Meines Wissens verwendet malloc die Heap-Zuweisungsfunktionen unter Windows.
Ich hoffe, das hilft.