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

时间:2012-01-23 15:49:14

标签: node.js v8

我发现致命错误,读取的文件太大而无法放入缓冲区。

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

或者,

  

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

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

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

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

3 个答案:

答案 0 :(得分:25)

V8中类型化数组的最大长度当前设置为kSmiMaxValue,具体取决于平台:

  • 1Gb - 32位
  • 上的1字节
  • 2Gb - 64位
  • 上的1byte

代码中的相关常量为v8::internal::JSTypedArray::kMaxLengthsource)。

V8团队正在努力在64位平台上进一步提高这一点,目前ArrayBuffer个对象可以达到Number.MAX_SAFE_INTEGER大(2 ** 53 - 1)。请参阅bug 4153

答案 1 :(得分:2)

现在记录为Node's 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

答案 2 :(得分:0)

似乎当前最大缓冲区大小为2147483647个字节,即2.147GB

来源:https://stackoverflow.com/a/44994896/3973137(和我自己的代码)