4 votes

Comment un vecteur alloué sur la pile se développe-t-il en C++?

Si je déclare un vecteur comme ceci :

int main() {
    vector names;
    int something_else_on_the_stack = 0;
    names.add("John");
    names.add("Annie");
}

Comment êtes-vous en mesure d'ajouter des éléments au vecteur de noms ? Si les noms sont alloués sur la pile, ne devrait pas "something_else_on_the_stack" être juste après sur la pile ? Alors comment pouvez-vous ajouter des noms au vecteur déjà alloué ?

8voto

MvG Points 22342

En interne, un vector sera très probablement composé d'un string* pointant vers les données réelles et probablement de deux autres membres size_t indiquant la mémoire occupée et réservée. Tout le reste sera sur le tas. Par conséquent, sizeof(vector) est fixé, et l'allocation sur la pile ne changera pas.

7voto

Henrik Points 16565

std::vector maintient internalement un pointeur vers un espace alloué sur le tas qui est redimensionné au besoin. L'emprunte sur la pile ne change pas.

2voto

Praetorian Points 47122

La taille qu'occupe un vector sur la pile est fixe et sera généralement égale à la taille de 3 pointeurs (ceci est spécifique à l'implémentation). Les pointeurs pointent vers le début du stockage, la capacité du vecteur et la taille du vecteur. Ces pointeurs pointent vers la mémoire de la zone libre (ou le heap, si vous préférez l'appeler ainsi) que le vecteur alloue au besoin pour contenir les objets que vous ajoutez au vecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X