Frage

Ich habe eine (möglicherweise dumme) Frage zur C++-STL.Wenn ich einen Container (Vektor, Satz, Karte usw.) erstelle, wird er dann auf dem Stapel oder auf dem Heap zugewiesen?Wenn ich einen Satz erstelle und 5 Millionen Zeichenfolgen einfüge, muss ich mir dann Sorgen über einen Stapelüberlauf machen?

War es hilfreich?

Lösung

STL-Klassen weisen ihre internen Puffer standardmäßig aus dem Heap zu, obwohl diese Klassen auch benutzerdefinierte Allokatoren zulassen, die es einem Benutzer ermöglichen, einen alternativen Speicherort für die Zuweisung anzugeben – z. B.ein gemeinsam genutzter Speicherpool.

Andere Tipps

Der Standardzuordner für STL-Container verwendet die Operatoren „new“ und „delete“, es handelt sich also um die Route, zu der diese für den enthaltenen Typ weitergeleitet werden.(Im Allgemeinen kommt es vom Heap, es sei denn, Sie unternehmen etwas, um das zu überschreiben.)

Bei der Zuweisung von 5 Millionen Zeichenfolgen kommt es nicht zu einem Stapelüberlauf.Selbst wenn Sie einen stapelbasierten Allokator erstellen würden, würde dieser wahrscheinlich überlaufen, bevor Sie überhaupt eine Zeichenfolge eingefügt haben.

Der Container selbst wird dort zugewiesen, wo Sie entscheiden (es kann sich um den Stapel, den Heap, das Mitglied eines Objekts usw. handeln), aber der von ihm verwendete Speicher wird standardmäßig, wie andere beschrieben, im Free Store übernommen (verwaltet durch „Neu“ und „Löschen“). Dies ist nicht dasselbe wie der Heap (verwaltet über malloc/free).

Vermischen Sie beides nicht!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top