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

  FORUM HardWare.fr
  Programmation
  C++

  Taille mémoire des énumérations

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Taille mémoire des énumérations

n°886871
peak
Posté le 31-10-2004 à 13:01:12  profilanswer
 

Je suis très étonné de constater qu'une énumération du type :  
"enum ColorStyle { RGB=3, RGBA };"
me squatte 4octets par instanciation de variables de type ColorStyle ; ce qui est simplement gigantesque (cf : sizeof(ColorStyle)).  
Je me demande si il n'y a pas quelque chose qui m'échappe par ce qu'on m'a souvent venté les mérites des énumérations mais dans ce cas c’est inutilisable ; je préfère très clairement utiliser un bool et un #define ça me prendra 4fois moins de place??
 
Est-il possible réduire la place mémoire d'un type énuméré en fonction du rang de valeurs utilisé?


---------------
"Theres 10 types of people in the world : Those who understand binary and those who don't."
mood
Publicité
Posté le 31-10-2004 à 13:01:12  profilanswer
 

n°886876
cris56
Posté le 31-10-2004 à 13:22:58  profilanswer
 

un enumerateur c'est une constante de type int
 
sizeof(ColorStyle) == sizeof(int)

n°886884
peak
Posté le 31-10-2004 à 13:34:30  profilanswer
 

Je pensai que c'était un peu plus suptile que ça!
 
tanpis; merci quand même :)


---------------
"Theres 10 types of people in the world : Those who understand binary and those who don't."
n°887480
Taz
bisounours-codeur
Posté le 31-10-2004 à 22:30:24  profilanswer
 

cris56 a écrit :

un enumerateur c'est une constante de type int
 
sizeof(ColorStyle) == sizeof(int)

non. le type sous-jacent est laissé à l'appréciation du compilateur.

n°887482
Lam's
Profil: bas.
Posté le 31-10-2004 à 22:35:22  profilanswer
 

Je crois même que le compilo n'est pas forcé d'utiliser la même taille pour toutes les énumérations (à moins que je confonde avec les bitfields...)

n°887503
Taz
bisounours-codeur
Posté le 31-10-2004 à 23:24:48  profilanswer
 

je vois rien qui empêche cela, une enum étant convertible avec le mécanisme de promotion entière traditionnel

n°887571
LeGreg
Posté le 01-11-2004 à 08:38:58  profilanswer
 

peak a écrit :


Est-il possible réduire la place mémoire d'un type énuméré en fonction du rang de valeurs utilisé?


 
Si tu les stockes de manière individuelles, tu as tout de meme de grande chance pour que le compilo les stockes par blocs facilement décodables par ton processeur donc par blocs de quatre octets au moins.
 
Tu as plus de chance de gagner de la place en stockant plusieurs variables ensembles. Comme quelqu'un l'a dit avec des bitfields, ou en utilisant des énums "ORées" ensemble.
 
LeGreg

n°888048
peak
Posté le 01-11-2004 à 21:37:50  profilanswer
 

Taz a écrit :

je vois rien qui empêche cela, une enum étant convertible avec le mécanisme de promotion entière traditionnel


Ok, je préfère ça; je me disait bien que ce n'était pas possible ; qu'il avait du y penser ... ceci dis l'idée de les combinés à plusieurs (si c'est bien ce que "...ou en utilisant des énums "ORées" ensemble.." signifait  :ange: ) ne m'enchante pas non plus étant donné que la raison de l'utilisation d'enum dans mon code est l'amélioration de sa lisibilité.  
Disons que c'est très pratique mais pas à ce coût là et que bon si je ne suis pas sur de ce qu'en fait mon compilo ça m'avance pas vraiment.
 
Pour l'instant j'utilise un char et un define ce qui ne me prend que 1octet par variable, bon évidement en soit c'est pas grand chose mais quand c'est une variable membre d'un objet instancier une centaine de millier de fois c'est tout de suite moins sympas de perde 1/2Mo...
Si je n'ai pas un moyen pour lequel je suis sûr de payer le même prix que mon char je me résignerai à ne pas utiliser d'enum par contre si vous avez une solution je demande pas mieux.
 
Merci à tous pour vos réponses. :jap:


Message édité par peak le 01-11-2004 à 21:42:20
n°888110
LeGreg
Posté le 01-11-2004 à 23:00:57  profilanswer
 

Tu peux stocker tes variables sous une forme et les lire sous une autre.
 
De plus tu n'es jamais obligé d'utiliser des #define pour définir des constantes numériques entières positives.
 
Et enfin tu peux stocker des valeurs au bit près si tu groupes tes déclarations ensembles (bitfields). Et cela sans limiter la lisibilité.

n°888198
peak
Posté le 02-11-2004 à 01:26:28  profilanswer
 

En effet ça devrait faire l'affaire, je connaissait pas cette technique.
 
Désolé, suis parfois un peu dur d'oreille.
 
Merci.


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

  Taille mémoire des énumérations

 

Sujets relatifs
Probleme de taille de bouton sur PDA avec WinCE4.2[Svg] Taille dynamique
[prog simple] Petit prog pour changer auto la taille d'une image[MFC/VC++] CScrollView/Garder une taille de police constante
Limite de taille dans les arguments de fonctions[css] Petit problème de taille d'un div
Lister les noms de fichiers,taille,type d'un serveur http ?[C#] WebBrowser & encoding : limite de taille du contenu ?
[HTML/CSS] Problème taille police dans tableau sous IE [RESOLU]La taille maxi d'une BDD mysql
Plus de sujets relatifs à : Taille mémoire des énumérations


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