Es hängt vollständig von der Plattform und der Darstellung ab.
Zum Beispiel nimmt eine Zeichenfolge in .NET zwei Bytes im Speicher pro UTF-16-Codepunkt. Surrogatpaare benötigen jedoch zwei UTF-16-Werte für ein vollständiges Unicode-Zeichen im Bereich U + 100000 bis U + 10FFFF. Das speicherinterne Formular hat auch einen Overhead für die Länge der Zeichenfolge und möglicherweise eine Auffüllung sowie den normalen Objekt-Overhead eines Typenzeigers usw.
Jetzt, wenn Sie eine Zeichenfolge auf die Festplatte (oder die Netzwerk usw.) von .NET, geben Sie die Kodierung an (die meisten Klassen haben den Standard UTF-8). An diesem Punkt hängt die Größe sehr von der Codierung ab. ASCII nimmt immer ein einzelnes Byte pro Zeichen, ist aber sehr begrenzt (keine Akzente usw.); UTF-8 bietet den vollen Unicode-Bereich mit einer variablen Kodierung (alle ASCII-Zeichen werden in einem einzigen Byte dargestellt, aber andere belegen mehr). UTF-32 verwendet immer genau 4 Bytes für jedes Unicode-Zeichen - die Liste geht weiter.
Wie Sie sehen können, ist es kein einfaches Thema. Um herauszufinden, wie viel Platz eine Zeichenfolge einnehmen soll, müssen Sie genau angeben was die Situation ist - ob es ein Objekt im Speicher auf einer Plattform ist (und wenn ja, welche Plattform - möglicherweise sogar bis auf die Implementierung Betriebssystemeinstellungen), oder ob es sich um ein unverändertes kodiertes Formular wie eine Textdatei handelt, und wenn ja, um welche Kodierung.
In Delphi Shortstring hat ein zusätzliches Byte, aber andere Zeichenfolge Typen hat zusätzliche vier Bytes. – inzKulozik
Ich weiß, aber die Shortstrings heißen Pascal Strings ;-). –
Sehr schöne Antwort, kurz und bündig, direkt auf den Punkt, und enthält die häufigsten Beispiele aus der Praxis. –