我得到了一个致命的错误阅读一个文件,这是太大,以适应一个缓冲区。
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类示例的最大大小是多少?
5条答案
按热度按时间a0zr77ik1#
在V8中,类型化数组的最大长度当前设置为
kSmiMaxValue
,根据平台的不同,它可以是:代码中的相关常量是
v8::internal::JSTypedArray::kMaxLength
(源代码)。V8团队正致力于在64位平台上进一步增加这一点,目前
ArrayBuffer
对象可以达到Number.MAX_SAFE_INTEGER
大(2**53 - 1)。参见bug 4153。piv4azn72#
这现在被记录为Node's
buffer
api的一部分,最大大小为buffer.constants.MAX_LENGTH
。buffer.constants.MAX_LENGTH
<integer>
单个Buffer示例允许的最大大小。(2^30)-1
(~1GB)。(2^31)-1
(~2GB)。此值也可以作为
buffer.kMaxLength
提供。所以你可以计算出它有多大
ezykj2lf3#
当前最大缓冲区大小似乎是2147483647字节,也就是2.147GB
来源:https://stackoverflow.com/a/44994896/3973137(和我自己的代码)
bogh5gae4#
缓冲区的实际最大大小在不同的平台和Node.js版本中会发生变化。您可以找到给定平台中的字节限制,运行以下命令:
a7qyws3x5#
对于我来说,在Node v16.14.2中,最大缓冲区大小是4294967296字节。这意味着最新版本的最大缓冲区大小正在增加。