bool fp[81]; From my understanding fp should use ceil(81/8) bytes because it is in succession.Am I correct? How can I prove this?
7 Réponses :
non, un bool code> est de 8 bits. Utilisez
vecteur
bitset code>. P>
Ou un boost :: dynamic_bitset, comme vecteur
@Johnny: il ne rencontre le Configuration de conteneurs .
Bool Être 8 bits n'est pas garanti.
-1 Non, la taille de bool code> est définie sur la mise en œuvre, pas nécessairement 8 bits.
Mais la taille de bool code> est garantie d'être au moins
char_bit code> bits. C (++) ne fait pas d'emballage bit à l'exception des champs de bit.
@Zack: Et le héritage vecteur
C'est la bibliothèque, pas la langue.
Non, chaque bool est généralement stocké séparément ( généralement em>, en fonction de votre ordinateur, de 8 bits). La mémoire occupée serait un minimum de 81 octets. P>
Non, son 81 * taille de taille (bool) code> qui est probablement 81 octets p>
Vous pouvez trouver le stockage utilisé par n'importe quel objet ou type avec Tailleof:
int main() { bool fp[81]; cout << sizeof fp << '\n'; cout << sizeof(bool[81]) << '\n'; return 0; }
Remarque Cela ne rapporte que la taille de l'objet réel sans la taille des ressources qu'il contrôle, telles que la mémoire allouée de manière dynamique: Tailleof (STD :: String) est une constante, même lorsqu'elle est appliquée à des cordes de longueur différente.
Vous pouvez vérifier sa taille en utilisant Tailleof (FP) code> qui dans mon cas donne 81 p>
Non, la taille de votre tampon est définie. Renvoyer la citation de la norme ci-dessous. P>
Par conséquent, la taille que vous pouvez attendre est de 81 * x où X est la taille de BOOL, qui est la mise en œuvre définie. P>
5,3,3 / 1 - "La taille de l'opérateur donne le nombre d'octets dans la représentation de l'objet de son opérande. L'opérande est une expression, qui n'est pas évalué, ni un identifiant de type parenthèses. La taille de l'opérateur ne doit pas être appliqué à une expression qui a une fonction ou un type incomplet, ou à un type d'énumération avant que tous ses énumérateurs aient été déclarés, ou au nom parenthèses de ces types, ou à un lvalue qui désigne
un champ de bit. Tailleof (Char), Taillef (Char) et Tailleof (Taille non signée) sont 1; les
Le résultat de la taille de l'application de tout autre type fondamental (3.9.1) est défini par la mise en œuvre. [
Ceci est correct, mais manque un point critique, qui est que tailleof (bool) code> doit être b> supérieur ou égal à
Tailleof (Char) Code>, parce que
tailleOf (char) code> est 1 par définition b>. [Oui, cela signifie qu'il serait diaboliquement difficile de faire une implémentation C conformable au C sur une machine adressable à un bit.] Par conséquent, quelle que soit la taille du tampon, il doit être au moins i> 81; Il ne peut pas être ceil (81/8).
Utilisez un bitset si vous souhaitez être sûr que chaque bit sera considéré comme un peu plutôt que d'utiliser un octet pour une valeur totale: Vous devez comprendre que c'est un très faible Contrainte de la mémoire de niveau des processeurs et de leurs instructions, car elles sont conçues pour supporter des mots de bits, pas de bits.
Cela aurait été une bonne chose que certaines instructions auraient été ajoutées à cette fin, car la chose Bitset fait que le bit est simplement un morve ... p> J'ai vraiment besoin d'apprendre l'assemblage X86. P> p>