Frage

Ein Blick in Javascript Arten Ich versuche, was für einige Datentypen die maximale Speichergröße, um herauszufinden ist. Zum Beispiel, habe ich einen schnellen rekursive algo bis zu var Größe bis zu den Browser-Abstürzen zu erhöhen, die irgendwo in der Nähe 128mb endet als (oder vielleicht ist es 256) für Saiten auf meiner vorhandene Version von Chrom.

Ich habe es die schmerzhafte Art und Weise getan, weil ich keine Angaben zu diesem Thema finden konnte, aber konstante Browser-Abstürze machen dies zu einem schmerzhaften Versuch (Try-Catch aus irgendeinem Grund mit diesem speziellen Thema nutzlos scheint).

Ich bin für Informationen über maximale Speichergröße für die anderen Typen auch auf der Suche (Array, Objekt, Funktionen, Strings, Zahlen, bools ...)

EMCA-262 Abschnitt 8.4 ist vage auf diesem

Die Länge einer Zeichenkette ist, die Anzahl der Elemente (das heißt, 16-Bit-Werte) in sie. Der leere String hat die Länge Null und enthält daher keine Elemente.

... so vielleicht ist dies etwas, dass Bedürfnisse identifiziert werden, wie in Browsern implementiert?

ECMA hat aber sagt uns über die Zahlen, zum Beispiel:

Die Typennummer hat genau 18437736874454810627 (das heißt, 2 ^ 64-2 ^ 53 + 3) Werte, die die doppeltgenauen 64-Bit-Format IEEE 754-Wert als für binäre Gleitkommaarithmetik in dem IEEE-Standard festgelegt, außer, dass die 9007199254740990 (die, 2 ^ 53-2 ist) verschiedene „Not-a-Number“ Werte der IEEE-Standards dargestellt werden in ECMAScript als einzigen speziellen NaN Wert.

Aber dann sehe ich nichts über Objekte.

Was kann ich für den Einsatz in Browsern erwarten? Gibt es eine Code-Basis gibt, die sehr große Objekte und Strings helfen bei der Verwaltung?

Wie viel Speicher kann ich in einem einzigen Skript zuweisen?

War es hilfreich?

Lösung

Wie Sie bereits erwähnt, die Spezifikation hat nicht Zustand jeder Größenbeschränkungen / Anforderungen für Typen neben Number.

Das ist also definitally links auf die Umsetzung.

Zum Beispiel Chrome Grenze auf Strings scheint bei etwa 512 MB hart codiert zu werden (und weniger auf 32-Bit).

Dies setzt eine Grenze für die maximal möglich Zuteilungsanforderung in 32-Bit-Versionen von 2 ^ 27-1. Die maximale flache Schnur Länge ~ 2 ^ 28 (512 MB Speicherplatz), und die maximale Stringlänge ist 2 ^ 29-1, so dass weder die diese Grenzen um das Problem zu fangen (würden wir eine Out-of-Memory-Ausnahme statt werfen, wenn sie taten).

Siehe auch: http://code.google.com/p/v8/issues / detail? id = 362 # c9

Bei den anderen Browsern gehen, würde dies einige der Forschung brauchen z.B. Firefox-Code ein Blick in. Aber ich bezweifle, dass wir für IE / Opera das gleiche tun.

Andere Tipps

ECMA Abschnitt 6.1.4 ist ausdrücklich darüber.

„The String-Typ ist die Menge aller geordneten Sequenzen von null oder mehr 16-Bit-Ganzzahl ohne Vorzeichen-Werte (‚Elemente‘) bis zu einer maximalen Länge von 2 ^ 53-1 Elementen“

Ich habe einige typische Grenzen für Streicher in eine andere Antwort aufgeführt. Grundsätzlich sind Sie in sicherem Gebiet bis zu einer Stringlänge von 2 27 Zeichen.

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