J'ai remarqué que la mémoire pour le vecteur est allouée dynamiquement. Donc, pour un vecteur local, où est allouée la mémoire?Où la mémoire d'un vecteur C++ local est-elle allouée?
f(){
vector<int> vi;
}
J'ai remarqué que la mémoire pour le vecteur est allouée dynamiquement. Donc, pour un vecteur local, où est allouée la mémoire?Où la mémoire d'un vecteur C++ local est-elle allouée?
f(){
vector<int> vi;
}
Le vecteur est alloué sur la pile (28 octets sur mon système). Les contenus vectoriels sont alloués sur le tas.
Pour développer la réponse de Yacoby, RAII signifie que lorsque vi
est hors de portée, tout alloué avec new
(à l'intérieur du vecteur) est delete
d (dans le destructor du vecteur). C'est ainsi que vous mélangez l'allocation de pile et de tas.
Vous pouvez modifier la façon dont la mémoire est allouée aux conteneurs STL avec la combinaison du type de modèle Allocator et de l'objet allocateur transmis au constructeur.
J'ai posé une question sur la façon de faire un stockage de pile d'utilisation de vecteur et obtenu this answer. Vous pourriez trouver cela intéressant.
+1 Très intéressant ... – Skilldrick
Défini +1 par moi. – Yacoby
Le vector
est affecté à chaque fois que le allocator
utilise l'allocation. Dans le cas par défaut de std::allocator
, il utilise ::operator new()
.
Que voulez-vous dire par "où"? Parlez-vous tas vs pile? – Toji
Oui, je veux dire pile vs tas – skydoor