Node.js Buffer的最大大小是多少

kgsdhlau  于 2023-04-20  发布在  Node.js
关注(0)|答案(5)|浏览(393)

我得到了一个致命的错误阅读一个文件,这是太大,以适应一个缓冲区。

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

或者
RangeError:Function.Buffer.allocUnsafe(buffer.js:209:3)中的“size”参数不得大于2147483647
如果我尝试分配一个1GB的缓冲区,我会得到同样的致命错误,

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

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

a0zr77ik

a0zr77ik1#

在V8中,类型化数组的最大长度当前设置为kSmiMaxValue,根据平台的不同,它可以是:

  • 1 Gb-1字节(32位)
  • 2Gb -64位上为1字节

代码中的相关常量是v8::internal::JSTypedArray::kMaxLength(源代码)。
V8团队正致力于在64位平台上进一步增加这一点,目前ArrayBuffer对象可以达到Number.MAX_SAFE_INTEGER大(2**53 - 1)。参见bug 4153

piv4azn7

piv4azn72#

这现在被记录为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
ezykj2lf

ezykj2lf3#

当前最大缓冲区大小似乎是2147483647字节,也就是2.147GB
来源:https://stackoverflow.com/a/44994896/3973137(和我自己的代码)

bogh5gae

bogh5gae4#

缓冲区的实际最大大小在不同的平台和Node.js版本中会发生变化。您可以找到给定平台中的字节限制,运行以下命令:

import buffer from "buffer";
console.log(buffer.constants.MAX_LENGTH);
a7qyws3x

a7qyws3x5#

对于我来说,在Node v16.14.2中,最大缓冲区大小是4294967296字节。这意味着最新版本的最大缓冲区大小正在增加。

相关问题