Combien d'octets d'une chaîne de tenir en place?
Quelqu'un peut me dire combien d'octets de l'en-dessous de la chaîne va prendre?
string abc = "a";
- il prend 17 octets dans la source. veuillez spécifier votre question un peu plus. envisagez-vous de la mémoire lors de l'exécution, lorsqu'ils sont encodés à byte[], ...
- Vous aurez besoin de clarifier certaines choses, par exemple: Cette chaîne, où allez-vous sauver? Dans la mémoire, comme l' .NET type "chaîne"? Dans un fichier? Avec quel encodage? Pourquoi êtes-vous intéressé? Si dans .NET de la mémoire, chaque corde de plus avec le même contenu n'est pas nécessairement utiliser beaucoup plus de mémoire depuis l'ancien peut être réutilisé
- Il en faut peu assez que vous ne devriez vraiment pas être intéressé à ce sujet 🙂
Vous devez vous connecter pour publier un commentaire.
De mon l'article sur les chaînes de:
Je soupçonne qui a été écrit avant que j'ai eu la chance de travailler avec une version 64 bits du CLR; je soupçonne que dans 64-bit de terre chaque chaîne de caractères, soit 4 ou 8 octets.
EDIT: j'ai écrit un post de blog, plus récemment, qui comprend 64 bits d'information (et en contradiction avec le dessus légèrement pour x86...)
null
prend 2 octets en une chaîne de caractères. Ma conjecture est que 20 est en fait "18 + 2 pour valeur null', et c'est pourquoi une chaîne vide et 1-chaîne de caractères va prendre la même quantité de mémoire.Fondamentalement, Chaque objet de type string nécessitent une constante de 20 octets pour les données de l'objet.
Le tampon nécessite 2 octets par caractère.
L'utilisation de la mémoire estimation de la chaîne en octets: 20 + (2 * Longueur).
Donc, Normalement, La mémoire dans le CLR pour cette chaîne: 22 octets
Cependant, alors que nous passons ou de l'envoi de cette chaîne à une autre fin ou dans toute autre utilisation, nous n'avons pas besoin de cette quantité de mémoire(nous n'avons jamais besoin de 20 octets pour les données de l'objet). Il dépend donc du type d'encodage que vous sélectionnez, pendant que vous l'utilisez.
Pour un encodage par défaut, il faut 1 octet par caractère.
Si la Réponse est 1 octet pour le codage par défaut.
Vous pouvez vérifier avec ce code:
Si vous vous posez au sujet de la taille de
string
objet alors qu'il est erroné de poser sur sa taille, sans débogueur il est impossible de dire exactement ce qu'il est. Pas sûr que cela est possible avec le débogueur soit.string
utilise des pointeurs en interne.Si vous vous posez au sujet de la taille de la séquence de caractères qu'il contient, alors il est de 4, parce que les chaînes de caractères sont stockées au format UTF-16. Tous les caractères dans le Plan Multilingue de Base sont codé sur deux octets.