In C ++ gibt es zwei Möglichkeiten, ein Objekt zu deklarieren. Zum Beispiel:
%Vor%Leute sagen, dass die erste Deklaration das Objekt im Heap und das zweite im Stack zuordnet. Ich kann mir vorstellen, wie es funktioniert, wenn sich das Vektorobjekt im Heap befindet. Der Compiler würde nur einen freien Block im Heap finden, um den Vektor zu speichern. Aber was würde passieren, wenn das Objekt auf dem Stapel zugewiesen wird, während ich dem Vektor neue Elemente drücke? Wird es genügend Speicherplatz geben? Wenn nicht, wie würde der Compiler einen ausreichend großen Speicherblock auf dem Stapel finden, um den Vektor zu speichern, wenn sich die Größe des Vektors ändern kann?
Das vector
-Objekt auf den Stapel zu legen bedeutet nicht, dass es seine Elemente auf den Stapel legt. Überprüfen Sie die Dokumentation:
Intern verwenden Vektoren ein dynamisch zugewiesenes Array zum Speichern ihrer Elemente. Dieses Array muss möglicherweise neu zugewiesen werden, damit es größer wird, wenn neue Elemente eingefügt werden. Dies bedeutet, dass ein neues Array zugewiesen und alle Elemente dorthin verschoben werden müssen.
Von: Ссылка
Tags und Links memory c++ memory-management