gpt4 book ai didi

javascript - Node.js:1D 与 2D 数组中的 100M 个元素——意外的内存问题

转载 作者:行者123 更新时间:2023-11-30 15:27:33 26 4
gpt4 key购买 nike

假设我有 1 亿个随机 float ,我试图将其保存在一个数组中。

起初,我将数字保存在一个二维数组(基本上是一个矩阵)中,但后来我想,如果我将所有 1 亿个元素存储在一个线性一维数组中,也许我可以使整个过程更快。

令我惊讶的是,这发生了:

10 000 × 10 000 二维数组

数组的创建和操作非常快,Node 运行时没有任何问题即使在默认内存限制下也是如此

100M—元素一维数组

当尝试生成 100M 随机 float 时 Node 抛出
fatal error :无效的数组长度分配失败 - JavaScript 堆内存不足
即使使用 --max_old_space_size=8192

调用

这是为什么?

这对我来说似乎非常违反直觉。我的猜测是制作一个长数组对象应该比在另一个数组中存储 10k 数组更节省内存。

所以,是的,我的问题是:这是为什么?

最佳答案

这在不同版本的实现中有所不同,但通常对单个对象的大小有硬性限制。参见 https://bugs.chromium.org/p/v8/issues/detail?id=3505有关详细信息。

在第一种情况下,您实际上有一个包含 10000 个指向其他数组的指针的数组,每个数组本身的大小仅为 10000。它们不需要在内存中连续——不像第二个例子,在第二个例子中,你在一个对象中有一个实际的 100000000 block 。因此,您达到了 Node 运行时设置的(完全任意的)上限(正如上面的链接和下面的评论所指出的,这是 V8 的一个方面,而不是 Node 特有的)。

关于javascript - Node.js:1D 与 2D 数组中的 100M 个元素——意外的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com