Taille en mémoire d'un booléen

Taille en mémoire d'un booléen - C++ - Programmation

Marsh Posté le 30-09-2004 à 20:59:30    

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

Reply

Marsh Posté le 30-09-2004 à 20:59:30   

Reply

Marsh Posté le 30-09-2004 à 21:06:42    

Un bool occupe 1 octet en mémoire.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 30-09-2004 à 21:10:38    

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...
Reply

Marsh Posté le 30-09-2004 à 21:34:34    

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

Reply

Marsh Posté le 30-09-2004 à 21:46:51    

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

Reply

Marsh Posté le 30-09-2004 à 21:49:30    

faudrais deja pouvoir adresser  un bit

Reply

Marsh Posté le 30-09-2004 à 21:49:51    

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 !
Reply

Marsh Posté le 30-09-2004 à 22:28:55    

ok merci

Reply

Marsh Posté le 30-09-2004 à 23:30:03    

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.

Reply

Marsh Posté le 30-09-2004 à 23:30:52    

sizeof(bool) :sol:  


---------------
http://www.janaga.com
Reply

Marsh Posté le 30-09-2004 à 23:30:52   

Reply

Marsh Posté le 01-10-2004 à 00:39:21    

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) ?

Reply

Marsh Posté le 01-10-2004 à 08:33:27    

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

Reply

Marsh Posté le 01-10-2004 à 08:57:12    

voilou

Reply

Marsh Posté le 01-10-2004 à 10:21:27    

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

Reply

Marsh Posté le 01-10-2004 à 10:37:48    

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?  
Reply

Marsh Posté le 01-10-2004 à 10:45:58    

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

Reply

Marsh Posté le 01-10-2004 à 13:45:38    

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

Reply

Marsh Posté le 01-10-2004 à 14:21:28    

Taz a écrit :

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


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

Reply

Marsh Posté le 01-10-2004 à 14:47:13    

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 ?
Reply

Marsh Posté le 01-10-2004 à 15:10:13    

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?  
Reply

Marsh Posté le 01-10-2004 à 15:16:07    

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
Reply

Marsh Posté le 01-10-2004 à 15:42:16    

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é...

Reply

Marsh Posté le 01-10-2004 à 17:05:29    

Lam's a écrit :

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

je vois pas le rapport.

Reply

Marsh Posté le 01-10-2004 à 17:19:18    

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 !
Reply

Marsh Posté le 06-10-2004 à 02:52:14    

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.

Reply

Marsh Posté le 07-10-2004 à 21:05:16    

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.

Reply

Marsh Posté le 07-10-2004 à 21:07:48    

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.

Reply

Marsh Posté le 08-10-2004 à 09:26:10    

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).

Reply

Marsh Posté le 08-10-2004 à 10:17:05    

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).

Reply

Marsh Posté le 08-10-2004 à 13:37:57    

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

Reply

Marsh Posté le 15-10-2004 à 19:27:28    

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

Reply

Marsh Posté le 15-10-2004 à 19:32:49    

ta gueule :o

Reply

Marsh Posté le 15-10-2004 à 19:57:34    

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]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed