web-dev-qa-db-ja.com

Node.jsバッファーの最大サイズはいくつですか

ファイルを読み取るとバッファに収まらないほどの重大なエラーが発生しました。

FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData() length exceeds max acceptable value

または、

RangeError:Function.Buffer.allocUnsafe(buffer.js:209:3)では、「サイズ」引数は2147483647より大きくてはいけません

1GBのバッファを割り当てようとすると、同じ致命的なエラーが発生します。

var oneGigInBytes = 1073741824;
var my1GBuffer = new Buffer(oneGigInBytes); //Crash   

Node.jsバッファークラスインスタンスの最大サイズはいくつですか?

38
Joel

V8の型付き配列の最大長は現在kSmiMaxValueに設定されており、プラットフォームに応じて次のいずれかになります。

  • 1Gb-32ビットで1バイト
  • 2Gb-64ビットで1バイト

コード内の関連定数はv8::internal::JSTypedArray::kMaxLengthsource )です。

V8チームは、64ビットプラットフォームでこれをさらに増やすことに取り組んでいます。現在、ArrayBufferオブジェクトは最大Number.MAX_SAFE_INTEGER大(2 ** 53-1)になる可能性があります。 バグ415 を参照してください。

26

これは現在 Nodeのbuffer api の一部として文書化されており、最大サイズは buffer.constants.MAX_LENGTH です。

buffer.constants.MAX_LENGTH<integer>単一のBufferインスタンスに許可される最大サイズ。

  • 32ビットアーキテクチャでは、この値は(2^30)-1(〜1GB)です。
  • 64ビットアーキテクチャでは、この値は(2^31)-1(〜2GB)です。

この値はbuffer.kMaxLengthとしても入手できます。

だからあなたはそれを行うことによってどれほど大きいかを理解することができます

> (require('buffer').constants.MAX_LENGTH + 1) / 2**30
2
4
Evan Carroll

現在の最大バッファサイズは2147483647バイト、つまり2.147GBのようです

ソース: https://stackoverflow.com/a/44994896/3973137 (そして私のコード)

1
Anthony