Node.js缓冲区的最大大小是多少

Joe*_*oel 37 v8 node.js

我读到一个文件太大而无法放入缓冲区时出现致命错误.

FATAL ERROR: v8::Object::SetIndexedPropertiesToExternalArrayData() length exceeds max acceptable value
Run Code Online (Sandbox Code Playgroud)

要么,

RangeError:在Function.Buffer.allocUnsafe(buffer.js:209:3)中,"size"参数不得大于2147483647

如果我尝试分配1GB缓冲区,我会得到同样的致命错误,

var oneGigInBytes = 1073741824;
var my1GBuffer = new Buffer(oneGigInBytes); //Crash   
Run Code Online (Sandbox Code Playgroud)

Node.js Buffer类实例的最大大小是多少?

Vya*_*rov 26

最大长度为1GB - 1byte.代码中的相关常量是kSmiMaxValue:

https://github.com/v8/v8/blob/c8bf5c35e431d4029e084024501863a4cf907882/src/objects.h#L4647-L4648

  • 由于V8的变化,情况不再如此.我不是100%确定当前定义的确切位置,但我的最大大小为2gb-1byte. (2认同)

Eva*_*oll 13

这现在被记录为Node 的bufferapi 的一部分,最大大小为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
Run Code Online (Sandbox Code Playgroud)