Cela dépend entièrement de la plate-forme et de la représentation.
Par exemple, dans .NET, une chaîne prend deux octets dans la mémoire par point de code UTF-16. Cependant, les paires de substitution nécessitent deux valeurs UTF-16 pour un caractère Unicode complet compris entre U + 100000 et U + 10FFFF. La forme en mémoire a également une surcharge pour la longueur de la chaîne et éventuellement un certain remplissage, ainsi que le surdébit normal d'un pointeur de type, etc.
Maintenant, lorsque vous écrivez une chaîne sur le disque (ou la réseau, etc) à partir de .NET, vous spécifiez l'encodage (avec la plupart des classes par défaut à UTF-8). À ce stade, la taille dépend beaucoup de l'encodage. ASCII prend toujours un seul octet par caractère, mais est très limité (pas d'accents, etc.); UTF-8 donne la plage complète Unicode avec un encodage variable (tous les caractères ASCII sont représentés dans un seul octet, mais d'autres prennent plus de caractères). UTF-32 utilise toujours exactement 4 octets pour tout caractère Unicode - la liste continue. Comme vous pouvez le voir, ce n'est pas un sujet simple. Pour déterminer combien d'espace une chaîne va prendre, vous devrez spécifier exactement quelle est la situation - si c'est un objet en mémoire sur une plate-forme (et si oui, quelle plate-forme - potentiellement même jusqu'à la mise en œuvre et les paramètres du système d'exploitation), ou s'il s'agit d'une forme cryptée brute telle qu'un fichier texte, et si oui, en utilisant quel encodage.
Dans Delphi shortstring a un octet supplémentaire, mais d'autres types de chaînes a quatre octets supplémentaires. – inzKulozik
Je sais, mais les shortstrings sont appelés chaînes pascal ;-). –
Très belle réponse, courte et douce, droit au but, et comprend les exemples les plus courants du monde réel. –