Maintenant, j'ai une chaîne "str" comprenant un certain nombre (je ne connais pas a priori ce nombre) de caractères. Comment je fais pour connaître la place qu'occupe cette chaîne en mémoire ?
Le résultat, en octets, est-il :
nombre de caractères +1 comme le montre "sizezof("AZERTYUIOP")"
"strlen()" va me donner le nombre de caractères, mais ne m'en dira pas plus. Est-ce qu'à cette valeur, qui n'est d'ailleurs peut-être pas représentative du nombre d'octets en mémoire, je dois ajouter les 7 octets liès au type "String" ?
Le mieux est de faire un "free()" avant l'allocation du String, et un "free()" après, et faire la différence.
Ce n'est pas parce que la structure d'un String prend 7 bytes que seulement 7 bytes sont alloués par le système.
Pour faire simple : oublie, et assure-toi de vérifier le retour de malloc() et new(), ou de ne pas utiliser d'allocation dynamique et de tout bien contrôler (ce qui est mieux dans un environnement à petite mémoire, pour éviter la fragmentation).
La classe String est une saloperie sans nom, je te déconseille vivement de l'utiliser.
En interne la classe String utilise de l'allocation dynamique, tu ne peut pas savoir quelle taille en mémoire utilise réellement ton objet de type String.
De plus la mémoire allouée pour ton texte est toujours plus grande que nécessaire pour ne pas avoir à réallouer de la mémoire (processus couteux en temps) à chaque char que tu ajoutes dedans.
sizeof(String) te donne la taille de le l'objet String sans la partie dynamique
String.length() te donne le nombre de caractère dans ta String.
La taille total en mémoire se situe donc quelque part pas loin de sizeof(String) + String.length() + 1 + ?.
Bon ça c'est la théorie, en pratique l'implémentation de la classe String par la team arduino est tellement mal faite qu'il y a allocation d'un octet pour chaque caractère ajouté dans la String.
Donc taille totale = sizeof(String) + String.length() + 1.
Utilise des tableaux de char, au moins tu saurait ce que tu fait