Vor kurzem sah ich den folgenden Beitrag:Wie lauten die Windows- und Linux-nativen OS/System-Aufrufe von malloc()?
Ein Speicherzuordner als malloc nicht niedriger Ebene ist. (Der Standardverteiler ruft malloc normalerweise direkt oder indirekt auf.)
Ein Zuweiser erlaubt Ihnen nur, verschiedene Zuweisungsstrategien anzugeben. Sie können beispielsweise einen Zuordner verwenden, der malloc einmal aufruft, um einen großen Speicherpool abzurufen, und dann für nachfolgende Zuordnungsanforderungen nur einen kleinen Teil dieses Pools zurückgibt.
Oder Sie können es als einen Haken verwenden, um Ihnen zu ermöglichen, einige zusätzliche Aufgabe jedes Mal durchzuführen, wenn Speicher zugewiesen oder freigegeben wird.
Was Ihre zweite Frage betrifft, ist malloc der niedrigste, den Sie ohne verlieren können. malloc wird in der Regel mit einigen OS-spezifische Speicherzuweisung Funktion implementiert, so dass die untere Ebene wäre noch. Aber das hat nichts mit Ihrer Hauptfrage zu tun, da C++ Allokatoren eine Abstraktion auf höherer Ebene sind.
Meine Frage ist-wie malloc wird in den folgenden Betriebssystemen implementiert?
- für Windows
- für Linux
was sind die OS-spezifische Funktionen, die dem Namen/Implementierungen von malloc sind()?
für Linux, es ist 'sbrk' –
Für welche Implementierung der Standard Library? "neu"/"malloc" ist nicht notwendigerweise Teil der OS-API selbst, z. unter Windows, die nur 'HeapAlloc',' VirtualAlloc' usw. als Teil ihrer API hat. – dyp
Nein, 'sbrk' ist unter Linux fast veraltet, es verwendet' mmap' –