Rozważmy następujący fragment kodu:Skąd wektor std :: vector przydziela jego pamięć?
#include <vector>
using namespace std;
void sub(vector<int>& vec) {
vec.push_back(5);
}
int main() {
vector<int> vec(4,0);
sub(vec);
return 0;
}
Zakładając „vec” nie ma wolnego miejsca do przechowywania 5 w funkcję „sub”, gdzie to przeznaczyć nową pamięć?
W ramce stosu funkcji podrzędnej? W takim przypadku wartość 5 zostanie usunięta na końcu podfunkcji. Ale ramka stosu głównej funkcji nie może rosnąć, ponieważ ramka stosu funkcji podrzędnej leży w tym momencie na wierzchu stosu.
Czy std :: vector przydziela pamięć dla swoich elementów na stercie? Ale w jaki sposób uwolni pamięć sterty? Jeśli jest to wektor lokalny na stosie, ramka stosu funkcji włącznie z wektorem jest usuwana na końcu bez sygnalizowania wektora, że zostanie usunięty?
Możesz chcieć spojrzeć na podzielniki STL. – pmdj
'sub (wektor & vec)' nazwany jako 'sub (vec)' byłby zdecydowanie łatwiejszy do odczytania;) –
LihO
** Przydziela pamięć w Heap ** [std :: vector Implementation] (http: // codereview .stackexchange.com/questions/60484/stl-vector-implementation) –