
Envoyé par
Emmanuel Deloget
Vu que ce sont des constantes, ils ne peuvent pas poser de problème en MT.
Et oui, les static const prennent de la place en mémoire, mais d'un autre coté, elles ont une adresse (ce qui peut être une propriété désirable dans certains cas). Ensuite, la place en mémoire prise est exactement le sizeof() du type * le nombre d'énumérateurs. Sur l'énumération donnée, on arrive royalement à 12 bytes, ce qui n'est pas vraiment excessif. Même si tu cibles des systèmes embarqué, à partir du moment où tu utilises du C++ tu abandonnes quand même une bonne partie de tes prétentions sur les contraintes de mémoire : il ne faut quand même pas exagérer. Quand bien même on mettrais une dizaine de valeurs et plusieurs dizaines d'énums, on arriverais joyeusement à 2K ? allez, soyons fous : 4K ? Même dans le monde embarqué actuel (ou on a régulièrement au moins 4 Mo de RAM, quand ce n'est pas 512), c'est quand même loin de poser un soucis. On ne parle même pas du monde des PC, ou on commence à voir germer ici et là des machines avec 8 Go ou 16 Go de RAM.
Effectivement, les enums ne prennent pas de place en mémoire. En contrepartie, ils ne sont pas typesafe, posent des problèmes au moment de la compilation du fait qu'ils ne respectent pas leur portée de définition (avoir une valeur VIOLET dans l'enum color et dans l'enum flower est impossible) ce qui a, de tout temps, nécessité l'utilisation de préfixes sur les enums, se transforment implicitement en int, sont stockés dans des variables dont la taille est inconnue et non maitrisée, nécessitent des tas de tests ici et là pour vérifier que les valeurs ne sortent pas de la liste donnée, etc.
Partager