2011-01-14 17 views
13

In JavaScript-Typen suchen Ich versuche herauszufinden, wie groß die maximale Speichergröße für einige Datentypen ist. Zum Beispiel habe ich einen schnellen rekursiven Algo eingerichtet, um die Var-Größe zu erhöhen, bis der Browser abstürzt, was schließlich irgendwo bei 128mb (oder vielleicht 256) für Strings in meiner bestehenden Version von Chrome liegt.Javascript maximale Größe für Typen?

Ich habe es die schmerzhafte Art und Weise getan, weil ich keine Spezifikationen zu diesem finden konnte, aber ständige Browserabstürze machen dies zu einer schmerzhaften Probe (Versuch fangen aus irgendeinem Grund mit diesem speziellen Problem nutzlos).

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 diesen

Die Länge eines Strings ist die Anzahl der Elemente (dh 16-Bit-Werte) innerhalb des Strings. Der leere String hat die Länge Null und enthält daher keine Elemente.

... vielleicht ist dies etwas, das in Browsern als implementiert identifiziert werden muss?

ECMA jedoch sagt uns über die Zahlen, beispielsweise

der Nummerntyp genau 18437736874454810627 hat (das heißt, 2^64-2^53 + 3) Werte, die die doppeltgenaue 64- Bit-Format IEEE 754-Werte wie im IEEE-Standard für binäre Fließkomma-Arithmetik angegeben, außer dass die 900799254740990 (d. h. 2^53-2) unterschiedlichen "Not-a-Number" -Werte des IEEE-Standards in ECMAScript as dargestellt sind ein einzelner spezieller NaN-Wert.

Aber dann sehe ich nichts über Objekte.

Was kann ich für die Verwendung in Browsern erwarten? Gibt es eine Code-Basis, die hilft, sehr große Objekte und Strings zu verwalten?

Wie viel Speicher kann ich in einem einzigen Skript zuordnen?

Antwort

7

Wie bereits erwähnt, gibt die Spezifikation nicht keine Größenbeschränkungen/Anforderungen für Typen neben Number.

Das ist also definitiv der Umsetzung überlassen.

Zum Beispiel scheint Chromes Limit für Strings bei etwa 512 MB (und weniger bei 32 Bit) fest codiert zu sein.

Dies begrenzt die maximal mögliche Zuteilungsanforderung in 32-Bit-Versionen von 2^27-1. Die maximale flache Zeichenfolge Länge ist ~ 2^28 (512 MB Speicherplatz), und die maximale Zeichenfolgenlänge ist 2^29-1, so dass weder diese Grenzen das Problem fangen (wir würden stattdessen eine Out-Of-Memory Ausnahme auslösen, wenn haben sie).

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

Was die anderen Browsern gehen, dies zum Beispiel einige der Forschung brauchen würde, in den Code von Firefox schauen. Aber ich bezweifle, dass wir das Gleiche für IE/Opera tun können.

+0

So gibt es wirklich kein zentraler Bereich für diese Art von Informationen? – Incognito

+0

Nicht wirklich, aber wenn du diese Grenzen erreichst, tust du höchstwahrscheinlich etwas, das nicht in die Browserumgebung passt :) Obwohl es immer noch interessant ist, zu den Informationen zu gelangen, aber wie gesagt, du wirst es tun müssen viel graben auf Google usw., um es zu finden. –

+0

Wie in jeder anderen Sprache ist die Frage "Was ist die maximale Länge eines Strings?" Analog zur Frage "Wie viel RAM hat der Computer?". Implementierungen können es zwar einschränken oder nicht (wie im Falle von Chrome), aber am Ende des Tages ist eine Zeichenfolge nur ein Array von Bytes (und tatsächlich ist es in den meisten Javascript-Interpretern da draußen nur ein dünner Wrapper um Null-terminiert C Zeichenfolgen). – slebetman

0

Ich habe einige typische Grenzwerte für Strings in another answer aufgeführt. Grundsätzlich sind Sie in einem sicheren Gebiet bis zu einer Zeichenfolgenlänge von 2 Zeichen.

5

ECMA Abschnitt 6.1.4 ist explizit darüber.

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

Verwandte Themen