Wie ist eine STL-map zugewiesen? Stack oder Heap?
Ich würde gerne wissen, ob die STL - map
in c++ zusammenhängende Speicher - oder ist der Speicher, der zugewiesen wird, um den heap?
- Was hat die Frage zu tun, mit "Ausrichtung"?
- Sie können sich nicht mit "stack" Speicher für
map
; es ist unmöglich. - Meine custom
stack_allocator
möchte mit Ihnen ein Wort. 😛 - Ich glaube nicht, dass wir denken die gleiche Bedeutung für das Wort "Stapel". 😛 ich Rede von der CPU-stack, nicht nur alles, was aussieht wie ein Stapel. Aber eigentlich dachte ich, dass Sie etwas zuordnet, die in einem stack-Mode. Ist der Zweck der Zuweisung zur effizienten Allokation, wenn Sie auftreten, in einem stack-Mode? Wenn ja, würden Sie bitte teilen? 😀 Schreiben allocators ist ein Schmerz...
- Gibt es eine bestimmten Grund, warum Sie kümmern. Können wir vielleicht mehr helfen, wenn Sie erklären, warum Sie das wissen wollen.
- Ich dachte, der
char mem[N]; stack_allocator<pair<const K, V>> alloc(mem); map<...> m(alloc);
, wo der Speicher ist ja auch auf dem stack - Oh, aber dann ist es auch nicht wirklich dynamisch Größe...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
map
ist ein dynamischen container, den Speicher für Ihre Elemente ist dynamisch zugewiesenen (was auch immer das bedeutet (es hängt davon ab, eine konfigurierbare Zuweisung)!).Darüber hinaus
map
ist ein node-basierte container, so dass jedes element geht in eine eigene, separate Zuweisung (so zu ermöglichen, maximale iterator und das Referenz-nicht-Invalidierung). Elemente sind fast sicher nicht im Speicher zusammenhängend, und wahrscheinlich verstreut in einer Weise, die widerspiegelt, wie Sie Hinzugefügt.Praktisch, eine Karte implementiert werden, wie einige Art von ausgewogene Struktur zu erreichen, um logarithmischen lookup, einfügen und löschen mal.
(Wenn Sie möchten, eine Daten-Struktur mit zusammenhängenden Lagerung und logarithmischen lookup-Zeit, betrachten einen sortierten Vektor.)
stack_allocator
das dauert ein memory-buffer als Eingabe zu reservieren, aber Sie können nicht in der Art, um im inneren des Speichers.Ist es mehr als wahrscheinlich, dass die Umsetzung-spezifisch, und you kann sich sicherlich ändern
die Zuweisung von beliebigen STL-container, aber das ist nicht für das schwache des Herzens, und Sie müssten, um den Blick auf die Dokumentation der standard-Bibliothek, die Sie verwenden.
Jedenfalls, Karte wird in der Regel umgesetzt als rot-schwarz-Baum und Baum-Knoten auf dem heap.
(Knoten im Baum, wenn ich das richtig verstehe, enthalten Instanzen von value_type, die Schlüssel/Wert-Paare von der Karte).
Beachten Sie, dass stack ist eine schlechte Lagerung-Idee für alle container, die als Stapel sollte als eine knappe Ressource.