タイプのJavaScriptの最大サイズ?
-
11-10-2019 - |
質問
JavaScriptタイプを調べてください。一部のデータ型の最大ストレージサイズが何であるかを見つけようとしています。たとえば、ブラウザがクラッシュするまでVARサイズを増やすようにクイック再帰アルゴを設定します。これは、既存のバージョンのChromeの文字列の128MB近く(または256)になります。
私はこれについて仕様を見つけることができなかったので、痛みを伴う方法でやっていますが、絶え間ないブラウザのクラッシュはこれを痛みを伴う試行にします(この特定の問題では、何らかの理由でキャッチは役に立たないようです)。
他のタイプの最大ストレージサイズに関する情報も探しています(配列、オブジェクト、関数、文字列、数字、ブール...)
EMCA-262セクション8.4はこれについてあいまいです
文字列の長さは、その中の要素の数(すなわち、16ビット値)です。空の文字列の長さはゼロであるため、要素は含まれていません。
...それで、おそらくこれはブラウザで実装されていると特定する必要があるものですか?
ただし、ECMAは数字について教えてくれます。たとえば、
数値タイプは正確に18437736874454810627(つまり、2^64-2^53+3)値であり、二重精度64ビット形式IEEE 754値を表します。 9007199254740990(つまり、2^53-2)IEEE標準の明確な「Not-A Number」値は、ECMAScriptで単一の特別なNAN値として表されています。
しかし、その後、私はオブジェクトについて何も見ません。
ブラウザで使用することに何が期待できますか?非常に大きなオブジェクトと文字列の管理に役立つコードベースはありますか?
単一のスクリプトでどのくらいのメモリを割り当てることができますか?
解決
すでに述べたように、仕様はそうです いいえ 以外の種類の任意のサイズ制限 /要件を記載してください Number
.
したがって、これは明確に実装に委ねられています。
たとえば、弦のChromeの制限は、約512MBでハードコード化されているようです(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で同じことができるとは思わない。
他のヒント
ECMAセクション6.1.4は、これについて明示的です。
「文字列タイプは、最大2^53-1要素の最大長さまでのゼロ以上の16ビットの非署名整数値(「要素」)のすべての順序付けられたシーケンスのセットです」
文字列の典型的な制限をいくつかリストしました 別の答え. 。基本的に、あなたは2の弦の長さまでの安全な領域にいます27 文字。