Occupation de la mémoire vive

Bonjour,

A la compilation, Arduino IDE m’a indiqué que mes variables globales occupaient 71% de mémoire vive. J’ai donc décidé de changer tous les int en byte :sunglasses:
Mais quand je compile (tout fonctionne, évidemment), le compilateur m’indique toujours que 71% de la mémoire vive est occupée par les variables globales…

Etrange, sachant qu’un byte est censé n’occuper qu’un octet, contre 4 pour un int :o

D’après vous, ça vient d’où?

Bonjour,

C'est bien le typage de tes variables globales que tu as changé ?

A part ça, la longueur de l'int dépend de la plateforme (2 bytes sur une Uno par exemple).

à mon humble avis cela veut certainement dire que le compilateur aligne les variables sur 32 bits. En d'autres mots, toute variable globale de moins de 4 octets, prendra quand même 4 octets. Il fait ca pour tomber toujours sur des adresses mémoires multiples de 4, pour simplifier la gestion et optimiser l'accès par un processeur 32 bits.
Si tu veux réduire la taille de tes globales (si t'en as beaucoup) il faut que tu les mettes dans une "struct", à partir de ce moment-là, c'est la structure qui va être alignée sur 32 bits donc t'y gagneras la place que t'attendais.
Enfin, tes 71% peuvent venir aussi d'objets C++ (si t'utilises beaucoup de librairies) ou autres variables "internes" qui peuvent occuper beaucoup de place : t'utilises quoi comme librairies dans ton code ?

Par ailleurs, des directives de compilation peuvent peut-être changer le mode d'alignement, malheureusement je ne connais pas assez GCC pour te dire lesquelles...

Il est vrai que j'utilise pas mail de librairies: Wire, LCD, New LCD (pour l'I2C), SD, ...

Pas bête le coup de la struct, je vais essayer ça :wink:

Si t’utilises beaucoup de librairies, ce sont leurs objets associés qui te mangent de la place en RAM et malheureusement tu ne pourras pas y faire grand chose…
Pour avoir un ordre d’idées, t’as combien de variables globales que t’as changé de int vers byte ?

...11 :sweat_smile:

Risitas_Issou:
...11 :sweat_smile:

ah non alors, en supposant que tu puisses gagner 3 octets par variable (en int elles prennent 4, en byte 1), ca te fait seulement 33 octets de gagnés, ce n'est même pas de quoi faire bouger un petit % dans ton code compilé !
Cherche plutôt du coté des librairies ou encore si t'as beaucoup de chaines de caractères "en dur", ca, ca mange très vite beaucoup de RAM...