c ++ Vector, o que acontece sempre que se expande / realoca na pilha?

Eu sou novo em C ++ e estou usando a classe de vetor no meu projeto. Eu achei muito útil porque eu posso ter uma matriz que realoca automaticamente sempre que for necessário (ou seja, se eu quiser push_back um item e o vetor atingiu sua capacidade máxima, ele realoca-se pedindo mais espaço de memória para o sistema operacional) o acesso a um elemento do vetor é muito rápido (não é como uma lista, que para alcançar o elemento "n-ésimo" eu tenho que passar pelos "n" primeiros elementos).

eu encontreiessa questão muito útil, porque suas respostas explicavam perfeitamente como"alocador de memória" funciona quando quero armazenar meu vetor no heap / stack:

[1] vector<Type> vect;
[2] vector<Type> *vect = new vector<Type>;
[3] vector<Type*> vect;

No entanto, uma dúvida está me incomodando por um tempo, e não consigo encontrar sua resposta: sempre que eu construo um vetor e começo a empurrarmuito de itens dentro, chegaria a um momento em que o vetor estaria cheio, então para continuar crescendo precisaria realocar, copiar-se para um novo local e então continuar empurrando os itens de volta (obviamente, essa realocação está escondida na implementação da classe , então écompletamente transparente para mim)

Bem, se eu criei o vetor no heap [2], não tenho problemas imaginando o que pode estar acontecendo: o vetor de classe chama malloc, adquire novo espaço e então copia a si mesmo para a nova memória e finalmente exclui a memória antiga chamando de graça.

No entanto, um véu esconde o que está acontecendo quando euconstruir um vetor na pilha [1]: O que acontece quando o vetor deve ser realocado? AFAIK, sempre que em C / C ++ você insere uma nova função, o computador olha para a declaração de variáveis ​​e depoisexpandir a pilha para obter o espaço necessário para colocar essas variáveis, mas você não pode alocar mais espaço na pilha quando a função já está em execução. Como o vetor de classes resolve esse problema?

questionAnswers(6)

yourAnswerToTheQuestion