首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2018年,谷歌的一位技术负责人表示,他们正致力于在64位系统上“支持V8中的4 4GiB以外的缓冲区”。这事发生了吗?

2018年,谷歌的一位技术负责人表示,他们正致力于在64位系统上“支持V8中的4 4GiB以外的缓冲区”。这事发生了吗?
EN

Stack Overflow用户
提问于 2020-09-25 00:48:16
回答 1查看 349关注 0票数 4

2018年,谷歌( Google 表示他们正在努力在64位系统上“支持V8中的4 4GiB以外的缓冲区”。 )的技术领先。这事发生了吗?

试图将大型文件加载到缓冲区中,如:

代码语言:javascript
复制
const fileBuffer = fs.readFileSync(csvPath);

在Node v12.16.1中获得错误:

代码语言:javascript
复制
RangeError [ERR_FS_FILE_TOO_LARGE]: File size (3461193224) is greater than possible Buffer: 2147483647 bytes.

在Node v14.12.0 (最新)中,获取错误:

代码语言:javascript
复制
RangeError [ERR_FS_FILE_TOO_LARGE]: File size (3461193224) is greater than 2 GB

在我看来,这是一个限制设置,因为32位整数用于寻址缓冲区。但我不明白为什么这会限制64位系统..。是的,我意识到我可以在一个特定的地址使用流或从文件中读取,但我有大量的内存,而且我被限制在2147483647字节,因为节点被限制在32位寻址?

当然,将一个高频随机访问数据集的缓冲区完全加载到一个缓冲区中而不是流中具有性能上的好处。指示从多个缓冲区替代结构中提取请求所涉及的代码将花费一些费用,而不管其大小.

我可以使用--max-old-space-size=16000标志来增加Node使用的最大内存,但我怀疑这是一个基于V8体系结构的硬限制。不过,我还是要问,因为Google的技术领军者确实声称他们正在将最大缓冲容量增加到超过4GiB:有任何办法在2020年在Node.js?中拥有超过2147483647字节的缓冲区吗?

编辑,相关跟踪器的主题由谷歌,其中很明显,他们至少在去年就在努力解决这个问题。https://bugs.chromium.org/p/v8/issues/detail?id=4153

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-25 01:22:10

这事发生了吗?

是的,V8现在支持非常大的(很多千兆字节) ArrayBuffers。

在Node.js中是否有超过2147483647字节的缓冲区?

是:

代码语言:javascript
复制
$ node
Welcome to Node.js v14.12.0.
Type ".help" for more information.
> let b = Buffer.alloc(3461193224)
undefined
> b.length
3461193224

尽管如此,fs.readFileAsync似乎有它自己的限制:https://github.com/nodejs/node/blob/master/lib/internal/fs/promises.js#L5,我不知道要用什么来提升它。我建议你在Node的bug追踪器上找个问题。

Buffer还有另一个限制:

代码语言:javascript
复制
> let buffer = require("buffer")
undefined
> buffer.kMaxLength
4294967295

再说一次,这是Node的决定,不是V8的决定。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64056286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档