Frage

Genau das: Ist ein Zeichenketten Länge gleich der Byte-Größe? Ist es an der Sprache eine Rolle?

Ich denke, es ist, aber ich möchte nur sicherstellen.

Zusätzliche Informationen: Ich frage mich nur im Allgemeinen. Meine spezifische Situation war PHP mit MySQL.

Wie lautet die Antwort nein, das ist alles, was ich wissen muss.

War es hilfreich?

Lösung

Nein. Ein Null-terminierten String hat ein zusätzliches Byte. Ein pascal Zeichenfolge (die Delphi Short) ein zusätzliches Byte für die Länge. Und Unicode-Strings hat mehr als ein Byte pro Zeichen.

Mit dem Unicode hängt es von der Codierung. Es könnte sein, 2 oder 4 Byte pro Zeichen oder sogar eine Mischung aus 1,2 und 4 Bytes.

Andere Tipps

Es hängt ganz von der Plattform und Repräsentation.

Zum Beispiel in .NET ein String nimmt zwei Bytes im Speicher pro UTF-16-Codepunkt. Jedoch Ersatzpaar erfordern zwei UTF-16-Wert für ein vollständiges Unicode-Zeichen im Bereich von 100000 bis U + U + 10FFFF. Die In-Memory-Form hat auch ein Overhead für die Länge der Zeichenfolge und möglicherweise einige padding sowie das normale Objekt Overhead eines Typs Zeiger etc.

Wenn Sie nun eine Zeichenfolge auf der Festplatte (oder das Netzwerk, etc.) von .NET schreiben, geben Sie die Codierung (mit dem meisten Klassen säumigen auf UTF-8). An diesem Punkt hängt die Größe sehr stark von der Codierung. ASCII nimmt immer ein einziges Byte pro Zeichen, ist aber sehr begrenzt (keine Akzente usw.); UTF-8 gibt den vollständigen Unicode-Bereich mit einer variablen Codierung (alles ASCII-Zeichen in einem einzigen Byte dargestellt, aber andere nehmen mehr). UTF-32 verwendet immer genau 4 Byte für jedes Unicode-Zeichen -. Die Liste geht weiter

Wie Sie sehen können, ist es kein einfaches Thema. Um herauszufinden, wie viel Platz ein String nehmen wird Sie angeben müssen genau , was die Situation ist - ob es sich um ein Objekt im Speicher auf einige Plattform (und wenn ja, auf welcher Plattform - potentiell sogar bis auf die Implementierung und Betriebssystemeinstellungen), oder ob es mich um eine rohe codierte Form wie eine Textdatei, und wenn ja, mit welcher Kodierung.

Es hängt davon ab, was Sie unter „Länge“. Wenn Sie „Anzahl der Zeichen“ bedeutet dann, nein, verwenden viele Sprachen / Codierverfahren mehr als ein Byte pro Zeichen.

Nicht immer, es hängt von der Codierung.

Es gibt keine allgemeingültige Antwort; es hängt von Sprache und Implementierung (denken Sie daran, dass einige Sprachen mehrere Implementierungen haben!)

Nullterminierter ASCII-Strings besetzen mindestens ein weiteres Byte als der "Inhalt" des Strings. (Mehr kann zugeordnet werden, je nachdem, wie die Zeichenfolge erstellt wurde.)

Nicht-Null-terminierten Strings einen Descriptor (oder ähnliches Gerät), Länge aufzuzeichnen, die zusätzlichen Speicher nimmt irgendwo .

Unicode-Strings (in verschiedenen Sprachen) verwenden zwei Bytes pro Zeichen.

Strings in einem Objektspeicher kann über Griffe verwiesen werden, die eine Schicht aus indirection fügt (und Daten), um die Speicherverwaltung zu vereinfachen.

Sie sind richtig. Wenn Sie als ASCII kodieren, gibt es ein Byte pro Zeichen. Ansonsten ist es ein oder mehr Bytes pro Zeichen.

Insbesondere ist es wichtig zu wissen, wie diese Effekte Operationen String. Wenn Sie nicht ein Byte pro Zeichen haben, tut s [n] die n-te Byte oder n-te Zeichen bekommen? die n-te Zeichen immer für große n statt konstant ineffizient sein, da sie mit einem ein Byte pro Zeichen ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top