GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was sind die nativen Betriebssystem-/Systemaufrufe von Windows und Linux, die von malloc() ausgeführt werden?

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 implementieren

Wie 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.


Linux
  1. Welche Mount-Optionen gibt es, um die Leistung des ext4-Dateisystems unter Linux zu verbessern?

  2. In welchen Sprachen sind Windows, Mac OS X und Linux geschrieben?

  3. Welche Zeichen sind in Windows- und Linux-Verzeichnisnamen verboten?

  4. Remote-Debuggen eines Linux-Prozesses von Windows mit gdb und gdbserver:Was genau wird auf der Windows-Seite benötigt?

  5. Was ist die Schnittstelle für ARM-Systemaufrufe und wo ist sie im Linux-Kernel definiert?

Was ist der Unterschied zwischen Linux und Unix?

Was sind Linux-Systemaufrufe und Bibliotheksfunktionen?

Was sind die Aufrufkonventionen für UNIX- und Linux-Systemaufrufe (und User-Space-Funktionen) auf i386 und x86-64

Was sind vdso und vsyscall?

Bestimmen Sie die Betriebssystemversion, Linux und Windows aus Powershell

Was ist der Unterschied zwischen einem Bibliotheksaufruf und einem Systemaufruf in Linux?