2010-11-09 3 views
1

Quelqu'un peut-il expliquer la disposition de la mémoire des données stockées dans un vector<bool>?Disposition de la mémoire du vecteur <bool>

comme quoi la disposition a la mémoire de l'adresse &myVec[0]? Cela dépend-il de l'endianisme? La mémoire est-elle contingente pour toutes les valeurs stockées? (Je suis conscient que vector<bool> ne stocke pas réellement les booléens). puis-je vider le contenu d'un vector<bool> dans un fichier en utilisant memcopy pour obtenir un bitmap de mes valeurs?

s'il vous plaît pas de questions comme "qu'est-ce que vous en avez besoin pour" ou des suggestions comme l'utilisation de bitsets ou boost.

Merci pour une explication précise

+0

La norme ne mentionne pas de disposition de mémoire explicite pour des raisons évidentes, juste qu'une spécialisation est offerte pour l'efficacité de l'espace, et comment l'accès aux bits simples est simulé par un type de référence. –

+0

que voulez-vous dire par "et comment l'accès aux bits uniques est simulé par un type de référence"? – Mat

+0

Pour citer la norme: "* référence est une classe qui simule le comportement des références d'un seul bit dans le vecteur *" - il est utilisé dans la déclaration de l'interface de std :: vector

Répondre

1

Le std :: vecteur va gérer simplement un tableau brut sur le tas. Alors que vous faites & myVec [0] vous obtenez l'adresse du premier élément de ce tableau. Comme il est un tableau ... il suit les règles d'un tableau brut ..

MAIS

std :: vecteur est un cas particulier, une mise en œuvre spécifique, une erreur de C du Comité qui n'est pas un vecteur de bool mais un conteneur de gestion des bits. Donc, évitez d'utiliser celui-ci.

+0

je suis conscient de cela et je voudrais connaître la mémoire utilisée pour les bits – Mat

+0

Je ne suis pas sûr de l'information exacte dont vous avez besoin, mais les tableaux sont garantis contigus bloc de mémoire. A part cela, il suit les règles de remplissage de la plateforme par défaut. – Klaim

1

Un vecteur est essentiellement un wrapper autour d'un tableau alors oui, la mémoire est contiguë. Cela signifie également que vous pouvez utiliser memcpy dessus (si c'est ce que vous voulez).

L'endianness de chaque élément dépend de votre architecture actuelle.

vector<bool> myvector; 
myvector.push_back(1); 
myvector.push_back(0); 
myvector.push_back(0); 
myvector.push_back(1); 
myvector.push_back(0); 
myvector.push_back(1); 
myvector.push_back(1); 
myvector.push_back(0); 

semblerait comme ceci en mémoire:

1 0 0 1 0 1 1 0 

Je ne sais pas si c'est ce que vous demandez.

+0

mais 'vector ' utilise des bits simples pour stocker les valeurs booléennes et je voudrais savoir sur l'ordre de ces bits – Mat

+0

oui c'est ce que je demandais. Donc s'il y a 13 booléens dans un 'vecteur ' ils sont stockés comme 13 bits consécutifs dans la mémoire? – Mat

+0

oui 13 bits consécutifs (non octets) – Marlon

Questions connexes