我发现致命错误,读取的文件太大而无法放入缓冲区。
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类实例的最大大小是多少?
答案 0 :(得分:25)
V8中类型化数组的最大长度当前设置为kSmiMaxValue
,具体取决于平台:
代码中的相关常量为v8::internal::JSTypedArray::kMaxLength
(source)。
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(和我自己的代码)