Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1416 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Taille en mémoire d'un booléen

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Taille en mémoire d'un booléen

n°861396
Nad1
Posté le 30-09-2004 à 20:59:30  profilanswer
 

J'aimerai juste savoir la taille en mémoire d'un booléen ! La prof nous a dis deux octets ca m'étonne un peu sachant que seul deux solution son possible true or false j'aurai plutot pensé à 1 bit! non?
 
Merci

mood
Publicité
Posté le 30-09-2004 à 20:59:30  profilanswer
 

n°861398
xterminhat​e
Si vis pacem, para bellum.
Posté le 30-09-2004 à 21:06:42  profilanswer
 

Un bool occupe 1 octet en mémoire.


---------------
Cordialement, Xterm-in'Hate...
n°861402
xterminhat​e
Si vis pacem, para bellum.
Posté le 30-09-2004 à 21:10:38  profilanswer
 

Seul vector<bool> tient compte d'une optimistion de sorte que chaque élement de type bool occupe un seul bit... module 8 au global.


---------------
Cordialement, Xterm-in'Hate...
n°861422
Nad1
Posté le 30-09-2004 à 21:34:34  profilanswer
 

ok mais si un bool occupe 1 octet en mémoire quece qui é codé sur les 8 bits ?

n°861433
Nad1
Posté le 30-09-2004 à 21:46:51  profilanswer
 

En fait je vient de trouver que cette taille dépendait du compilateur :  
 

Citation :

Même taille que le type int, parfois 1 sur quelques compilateurs  
 
Prend deux valeurs : 'true' et 'false' mais une conversion implicite (valant 0 ou 1) est faite par le compilateur lorsque l'on affecte un entier (en réalité toute autre valeur que 0 est considérée comme égale à True).


 
Source CcM (comment ca marche.net)
 
Mais j'ai toujours pas compris pourquoi 1 ou 2 octets alors qu'un bit suffirai... si qqun sait..
 
Merci

n°861434
cris56
Posté le 30-09-2004 à 21:49:30  profilanswer
 

faudrais deja pouvoir adresser  un bit

n°861435
kadreg
profil: Utilisateur
Posté le 30-09-2004 à 21:49:51  profilanswer
 

Nad1 a écrit :


Mais j'ai toujours pas compris pourquoi 1 ou 2 octets alors qu'un bit suffirai... si qqun sait..


 
parceque le processeur ne sait addresser que des mots, et que de toutes façons, zsi tu as benoi de moins, il aligne sur cette taille/


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°861492
Nad1
Posté le 30-09-2004 à 22:28:55  profilanswer
 

ok merci

n°861570
bjone
Insert booze to continue
Posté le 30-09-2004 à 23:30:03  profilanswer
 

l'Itanium possède des registres booléens.  
 
64 registres indépendants de 1 bits qui servent à la prédication.
 
stoqué en mémoire, c'est variable suivant le compilo.
 
dans le cas d'un calcul sans stoquage mémoire explicite, sur un itanium, 1 bool c'est un registre de prédication.

n°861572
nithril
Posté le 30-09-2004 à 23:30:52  profilanswer
 

sizeof(bool) :sol:  


---------------
http://www.janaga.com
mood
Publicité
Posté le 30-09-2004 à 23:30:52  profilanswer
 

n°861615
Taz
bisounours-codeur
Posté le 01-10-2004 à 00:39:21  profilanswer
 

Nithril a écrit :

sizeof(bool) :sol:

voilà une réponse de censé. classiquement on a sizeof(bool) == sizeof(char).
 
maintenant, pourquoi est-ce qu'un bool fait minimum sizeof(char) ?

n°861729
cris56
Posté le 01-10-2004 à 08:33:27  profilanswer
 

parce que par definition char designe la plus petite entité adessable ?

n°861731
Taz
bisounours-codeur
Posté le 01-10-2004 à 08:57:12  profilanswer
 

voilou

n°861810
cris56
Posté le 01-10-2004 à 10:21:27  profilanswer
 

d'ailleur sizeof renvoi une taille en char et non en byte ?

n°861848
jagstang
Pa Capona ಠ_ಠ
Posté le 01-10-2004 à 10:37:48  profilanswer
 

si tu fais une structure avec 2 bool et 2 char, ta mémoire sera adressée différement selon l'ordre  
 
bool  
char
bool
char
 
prendre plus de place que  
 
bool
bool
char
char


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°861861
Lam's
Profil: bas.
Posté le 01-10-2004 à 10:45:58  profilanswer
 

JagStang a écrit :

si tu fais une structure avec 2 bool et 2 char, ta mémoire sera adressée différement selon l'ordre  
 
bool  
char
bool
char
 
prendre plus de place que  
 
bool
bool
char
char


 
Aille, non, pas en pratique sur les machines que l'on a (windows ou unix), vu que char et bool sont généralement implémentés en 8 bits.
Tu devais penser à :

Code :
  1. char // mem+O
  2. bool // mem+1
  3. long // mem+4


 
contre

Code :
  1. long // mem+0
  2. char // mem+4
  3. bool // mem+5

n°862060
Taz
bisounours-codeur
Posté le 01-10-2004 à 13:45:38  profilanswer
 

ça dépend de ton compilateur et de ton architecture.

n°862097
Lam's
Profil: bas.
Posté le 01-10-2004 à 14:21:28  profilanswer
 

Taz a écrit :

ça dépend de ton compilateur et de ton architecture.


Taz, c'est fini les machines qui addressent en 8 bits...  

n°862142
lsdYoYo
gravity powered
Posté le 01-10-2004 à 14:47:13  profilanswer
 

Je pense que dans beaucoup d'implémentation les types "bool" et "char" sont équivalents, sauf pour "unsigned bool" (fun !).
Il est évident qu'il est impossible pour les compilos d'allouer moins d'un octet pour stocker un bool. Imaginez ce que pourrait donner un pointeur (ou une référence) si ce n'était qu'un bit. Si vous voulez couper les cheveux (ou les octets) en quatre, employer les champs de bits dans les structures, ça existe depuis les toutes premières versions du C (struct { unsigned a:2, b:3, c:1, ...; }; )
La grande utilité de bool est de signaler explicitement à quoi va servir la variable.


Message édité par lsdYoYo le 01-10-2004 à 14:47:31

---------------
If I want to fail and succeed, which I have done ?
n°862188
jagstang
Pa Capona ಠ_ಠ
Posté le 01-10-2004 à 15:10:13  profilanswer
 

Lam's a écrit :

Aille, non, pas en pratique sur les machines que l'on a (windows ou unix), vu que char et bool sont généralement implémentés en 8 bits.
Tu devais penser à :

Code :
  1. char // mem+O
  2. bool // mem+1
  3. long // mem+4


 
contre

Code :
  1. long // mem+0
  2. char // mem+4
  3. bool // mem+5




et pourtant. je l'ai testé l'an passé...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°862200
Lam's
Profil: bas.
Posté le 01-10-2004 à 15:16:07  profilanswer
 

JagStang a écrit :

et pourtant. je l'ai testé l'an passé...


Attention, je te donne l'implémentation en mémoire de base. Après, les 2 exemples que je donnes vont tous les deux être alignés sur 8 octets.
Donc, si tu fais une structure et que tu en fais un sizeof, dans les 2 cas ça prendra 8 octets sur des machines 32 bits.  
Sinon, il est possible que tu aies compilé en mode optimisé, et que le compilo aie décidé de tout aligner sur 32 bits (sauf les bool). Mais ça me parrait super louche : je n'ai jamais entendu parler d'une telle exception...
 


Message édité par Lam's le 01-10-2004 à 15:16:51
n°862248
docmaboul
Posté le 01-10-2004 à 15:42:16  profilanswer
 

Lam's a écrit :

Attention, je te donne l'implémentation en mémoire de base. Après, les 2 exemples que je donnes vont tous les deux être alignés sur 8 octets.
Donc, si tu fais une structure et que tu en fais un sizeof, dans les 2 cas ça prendra 8 octets sur des machines 32 bits.  
Sinon, il est possible que tu aies compilé en mode optimisé, et que le compilo aie décidé de tout aligner sur 32 bits (sauf les bool). Mais ça me parrait super louche : je n'ai jamais entendu parler d'une telle exception...


 
De toute façon, supposer que les membres d'une structure sont alignés ainsi, c'est moisi. Avec le cc d'un solaris sparc par exemple, c'est niqué...

n°862335
Taz
bisounours-codeur
Posté le 01-10-2004 à 17:05:29  profilanswer
 

Lam's a écrit :

Taz, c'est fini les machines qui addressent en 8 bits...

je vois pas le rapport.

n°862356
kadreg
profil: Utilisateur
Posté le 01-10-2004 à 17:19:18  profilanswer
 

Taz a écrit :

je vois pas le rapport.


 
il dit qu'il voit pas le rapport :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°865742
g012
Posté le 06-10-2004 à 02:52:14  profilanswer
 

Taz a écrit :

je vois pas le rapport.


Je pense qu'il voulait dire: c'est fini les compilos qui alignent pas. Ce qui est faux. Ça reste une option les optimisations d'alignement 2, 4, 8, ... octets.

n°867439
kR0M
Posté le 07-10-2004 à 21:05:16  profilanswer
 

la vraie raison c'est surtout que créer un type bool sur 1 bit nécessitait que l'architecture du système ait prévu qu'on puisse coder des données sur 1 bit, or comme on le sait tous, une donnée prend au minimum 1 octet, on ne peut rien lire de moins grand, c'est dû au fonctionnement même des processeurs, et comme le logiciel vient après le matériel, ils ont adapté les langages au matériel. point.
ceci dit, rien ne t'empêche d'optimiser toi meme...
si t'as 8 bool ou moins, ça ne prend qu'un char mais si ton programme en manipule plus de 8, va falloir créer des tas de char, pas pratique.
indépendamment de ça faudra coder des fonctions qui utilisent des masques pour sortir la valeur du bit désiré, etc, etc...
c'est du vécu et au final ça coûte plus de temps CPU que de coller ton bool sur un octet.

n°867445
Taz
bisounours-codeur
Posté le 07-10-2004 à 21:07:48  profilanswer
 

non on le sait pas tous. y a des architectures ou la plus petite unité adressable fait 16bits ou 32bits. Donc ton explication tombe à l'eau. Si sizeof(bool) >= sizeof(char) c'est uniquement une contrainte du C qui dit que le char est la plus petite unité adressable et que sizeof(char) == 1 par définition.

n°867769
Lam's
Profil: bas.
Posté le 08-10-2004 à 09:26:10  profilanswer
 

Taz a écrit :

non on le sait pas tous. y a des architectures ou la plus petite unité adressable fait 16bits ou 32bits.


 
16 bits c'est plus grand que 8 bits, OK ? Donc, si certaines archi ne savent pas faire moins de 16 bits, c'est qu'elles ne savent pas faire moins de 8 bits, OK ? (tout comme par exemple, il est correct de dire qu'un dé à 6 faces ne peut donner plus de 12 valeurs).
 
Au fait, as tu des exemples de telles architectures (en terme d'addressage 16 bits, hein, pas juste une archi qui demande des pauvres accès mémoires alignés).

n°867807
docmaboul
Posté le 08-10-2004 à 10:17:05  profilanswer
 

Lam's a écrit :

16 bits c'est plus grand que 8 bits, OK ? Donc, si certaines archi ne savent pas faire moins de 16 bits, c'est qu'elles ne savent pas faire moins de 8 bits, OK ? (tout comme par exemple, il est correct de dire qu'un dé à 6 faces ne peut donner plus de 12 valeurs).
 
Au fait, as tu des exemples de telles architectures (en terme d'addressage 16 bits, hein, pas juste une archi qui demande des pauvres accès mémoires alignés).


 
De toute façon, supposer qu'un bool fait 1 bit, 1 octet, 2 octets, 4 octets ou je ne sais quoi encore, c'est moisi. Un bool, ça fait sizeof(bool) et basta. Après, tout dépend de l'archi, de l'ABI utilisée et de la manière dont le compilo la respecte. Bref, sa prof aurait du répondre qu'il n'a pas à se préoccuper de la taille d'un bool à moins de très bien savoir ce qu'il veut faire (à savoir, écrire du code non-portable).

n°867971
l'eau de l​a
Posté le 08-10-2004 à 13:37:57  profilanswer
 

les DSP type C24 de TI sont avec sizeof(char) == 1 avec le char qui fait 16 bits.

n°874375
kR0M
Posté le 15-10-2004 à 19:27:28  profilanswer
 

on parle de l'architecture que tout le monde utilise, à savoir du x86, qu'est-ce que j'en ai à foutre de savoir que sizeof(bool) = l'age de ma grand mère dans les processeurs Gzoul47 dédiés aux ascenceurs au Pérou

n°874380
Taz
bisounours-codeur
Posté le 15-10-2004 à 19:32:49  profilanswer
 

ta gueule :o

n°874391
cris56
Posté le 15-10-2004 à 19:57:34  profilanswer
 

l'eau de la a écrit :

les DSP type C24 de TI sont avec sizeof(char) == 1 avec le char qui fait 16 bits.


 

kR0M a écrit :

on parle de l'architecture que tout le monde utilise, à savoir du x86, qu'est-ce que j'en ai à foutre de savoir que sizeof(bool) = l'age de ma grand mère dans les processeurs Gzoul47 dédiés aux ascenceurs au Pérou


 
[:ayalou]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Taille en mémoire d'un booléen

 

Sujets relatifs
mon lien a href modifie la taille de la fontTaille BDD et hébergement.
purger la memoireJtree x Custom CellRenderer x CardPanel -> Memoire qui explose
taille d'un fichier transmis par FTP ?Comment régler la taille de memoire JVM ?
Taille des application VBA ExcelPopup de taille adaptee...
Mémoire temporaire 
Plus de sujets relatifs à : Taille en mémoire d'un booléen


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR