13

JavaScript の型を調べて、一部のデータ型の最大ストレージ サイズを調べようとしています。たとえば、ブラウザーがクラッシュするまで var サイズを増やすための再帰的アルゴをすばやく設定しました。これにより、既存のバージョンの chrome の文字列の場合、最終的に 128 MB (または 256 MB) 近くになります。

これに関する仕様を見つけることができなかったので、私は苦痛な方法でそれを行ってきましたが、絶え間ないブラウザーのクラッシュにより、これは苦痛な試行になります (この特定の問題では、何らかの理由で catch を試しても役に立たないようです)。

他のタイプ (配列、オブジェクト、関数、文字列、数値、ブール値など) の最大ストレージ サイズに関する情報も探しています。

EMCA-262 セクション 8.4 はこれについて曖昧です

String の長さは、その中の要素 (つまり、16 ビット値) の数です。空の String の長さはゼロであるため、要素は含まれません。

...おそらく、これはブラウザに実装されていると特定する必要があるものでしょうか?

ただし、ECMA は数字について教えてくれます。たとえば、

Number 型には、正確に 18437736874454810627 (つまり、2^64−2^53+3) の値があり、IEEE Standard for Binary Floating-Point Arithmetic で指定されている倍精度 64 ビット形式の IEEE 754 値を表します。 9007199254740990 (つまり、2^53−2) の IEEE 標準の個別の「非数」値は、ECMAScript では単一の特別な NaN 値として表されます。

しかし、オブジェクトについては何も表示されません。

ブラウザでの使用には何が期待できますか? 非常に大きなオブジェクトや文字列を管理するのに役立つコードベースはありますか?

1 つのスクリプトに割り当てることができるメモリの量は?

4

3 に答える 3

7

すでに述べたように、仕様には、以外のタイプのサイズ制限/要件は記載されていませNumber

したがって、これは間違いなく実装に任されています。

たとえば、文字列に対する Chrome の制限は、約 512 MB (32 ビットではそれ以下) でハードコードされているようです。

これにより、2^27-1 の 32 ビット バージョンで可能な割り当て要求の最大数が制限されます。フラット文字列の最大長は ~2^28 (512MB スペース) であり、最大文字列長は 2^29-1 であるため、これらの制限のどちらも問題をキャッチしません (問題が発生した場合は、代わりにメモリ不足例外をスローします)。 )。

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

他のブラウザに関する限り、これには Firefox のコードを調べるなどの調査が必要です。しかし、IE / Opera で同じことができるとは思えません。

于 2011-01-14T19:51:16.377 に答える
5

ECMA セクション 6.1.4 は、これについて明示しています。

「文字列型は、最大長 2^53-1 要素までの 0 個以上の 16 ビット符号なし整数値 (「要素」) のすべての順序付けられたシーケンスのセットです」

于 2016-05-06T20:37:41.077 に答える
-1

別の回答で、文字列の典型的な制限をいくつかリストしました。基本的に、文字列の長さが 2 27文字までは安全な領域にいます。

于 2015-03-03T21:10:41.123 に答える