Question

Exactement cela: une longueur de chaîne est-elle égale à la taille en octets? Est-ce important pour la langue?

Je pense que oui, mais je veux juste en être sûr.

Info supplémentaire: Je me pose une question en général. Ma situation spécifique était PHP avec MySQL.

Comme la réponse est non, c'est tout ce dont j'avais besoin de savoir.

Était-ce utile?

La solution

Nope. Une chaîne terminée par zéro a un octet supplémentaire. Une chaîne pascal (la chaîne courte Delphi) a un octet supplémentaire pour la longueur. Et les chaînes unicode ont plus d’un octet par caractère.

En unicode, cela dépend du codage. Il peut s’agir de 2 ou 4 octets par caractère ou même d’un mélange de 1,2 et 4 octets.

Autres conseils

Cela dépend entièrement de la plate-forme et de la représentation.

Par exemple, dans .NET, une chaîne prend deux octets en mémoire par point de code UTF-16. Toutefois, les paires de substitution nécessitent deux valeurs UTF-16 pour un caractère Unicode complet compris entre U + 100000 et U + 10FFFF. Le formulaire en mémoire a également une surcharge pour la longueur de la chaîne et éventuellement un remplissage, ainsi que la surcharge normale d'un pointeur de type, etc.

Désormais, lorsque vous écrivez une chaîne sur le disque (ou le réseau, etc.) à partir de .NET, vous spécifiez le codage (la plupart des classes sont définies par défaut sur 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 gamme Unicode complète avec un codage variable (tous les caractères ASCII sont représentés dans un seul octet, mais d'autres en prennent plus). UTF-32 utilise toujours exactement 4 octets pour tout caractère Unicode - la liste s'allonge.

Comme vous pouvez le constater, ce n’est pas un sujet simple. Pour déterminer l'espace qu'une chaîne va occuper, vous devez spécifier exactement quelle est la situation - qu'il s'agisse d'un objet en mémoire sur une plate-forme (et si oui, quelle plate-forme - potentiellement jusqu’à la mise en œuvre et aux paramètres du système d’exploitation), ou s’il s’agit d’un formulaire codé brut tel qu’un fichier texte, et si tel est le cas, utilisez quel codage.

Cela dépend de ce que vous entendez par "longueur". Si vous voulez dire " nombre de caractères " alors, non, beaucoup de langages / méthodes d'encodage utilisent plus d'un octet par caractère.

Pas toujours, cela dépend de l'encodage.

Il n'y a pas de réponse unique; cela dépend des implémentations de langue et (rappelez-vous que certaines langues ont plusieurs implémentations!)

Les chaînes ASCII terminées par un zéro occupent au moins un octet de plus que le "contenu". de la chaîne. (Plus peut être alloué, en fonction de la façon dont la chaîne a été créée.)

Les chaînes non terminées par un zéro utilisent un descripteur (ou une structure similaire) pour enregistrer la longueur, ce qui prend de la mémoire supplémentaire quelque part .

Les chaînes Unicode (dans différentes langues) utilisent deux octets par caractère.

Les chaînes d'un magasin d'objets peuvent être référencées via des descripteurs, ce qui ajoute une couche d'indirection (et davantage de données) afin de simplifier la gestion de la mémoire.

Vous avez raison. Si vous encodez en ASCII, il y a un octet par caractère. Sinon, il s'agit d'un ou de plusieurs octets par caractère.

En particulier, il est important de savoir comment cela affecte les opérations de sous-chaîne. Si vous n'avez pas un octet par caractère, est-ce que s [n] obtient le nième octet ou le nième caractère? Obtenir le nième caractère sera inefficace pour les grands n au lieu de constants, comme c'est le cas avec un octet par caractère.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top