sizeof() std::vector (C++)
Il y a un sujet déjà sur ce sujet, mais j'ai des doutes encore. Pour calculer la taille d'un vecteur, qui est la bonne:
sizeof(VEC) + sizeof(int) * VEC.capacity()
ou
VEC.capacity() * (sizeof(VEC) + sizeof(int))
double possible de sizeof() est un vecteur
C'est seulement une supposition, selon la façon dont les travaux de mise en œuvre.
C'est seulement une supposition, selon la façon dont les travaux de mise en œuvre.
OriginalL'auteur Shibli | 2012-01-08
Vous devez vous connecter pour publier un commentaire.
Qu'entendez-vous par la taille du vecteur? La taille de l'objet vectoriel est juste
Si vous êtes intéressé par la quantité de mémoire le vecteur a alloué sur le tas, vous pouvez utiliser
Donc, si vous ajoutez, vous pouvez obtenir la quantité de mémoire que vous avez "perdu" à cause du vecteur.
Veuillez noter que exactement la quantité de mémoire allouée est dépendant de l'implémentation. C'est juste que la formule ci-dessus seront pratiquement correct (ou approximativement correct) sur la plupart, sinon de toutes les implémentations.
Avez-vous réellement lu ma réponse?
Je pense que, étant donné les contraintes sur la façon dont un
vector
être valablement mis en œuvre, ce qui donne un correct limite inférieure sur la quantité de mémoire unvector
et son contenu occuper. +1.Mais il semble que la mémoire allouée pour un tableau dynamique et un vecteur serait le même si le nombre de leurs membres et les types sont les mêmes.
À l'égard de la pratiquement correct: la "meilleure" approche de mise en œuvre de
std::vector<T>
est d'avoir l'objet de stocker un pointeur versT
qui est un pointeur sur le début de la éléments et d'avoir les données de contrôle (lestd::vector<T>
's la taille, la capacité, et l'allocateur) précèdent immédiatement les valeurs. Cette approche n'est pas nécessairement portable, mais il n'a pas à être depuisstd::vector<T>
fait partie de la mise en œuvre. En plus des données de contrôle de lastd::vector<T>
la mémoire de gérer le système généralement ajoute également quelques octets en face de l'allouer de la mémoire.OriginalL'auteur Armen Tsirunyan
Si vous voulez connaître la taille des données contenues dans le vecteur
Si le type est modifié à partir de int-à-dire de longs rien d'autre ne doit être changé. Je trouve cette solution plus sûre que celle utilisant le type dans la sizeof car il peut facilement être modifié sans l'autre.
OriginalL'auteur Mario