首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript增加最大数组大小

Javascript增加最大数组大小
EN

Stack Overflow用户
提问于 2016-04-09 22:00:09
回答 3查看 13.1K关注 0票数 6

我试图创建一个大小为2^32 = 4294967296的数组,因为我试图通过运行筛子算法得到所有素数到2^32为止。但是,该数组中的任何操作都会出现以下错误:

致命错误: CALL_AND_RETRY_LAST分配失败-进程内存不足 中止陷阱:6

在上述情况下,我能做些什么?

EN

回答 3

Stack Overflow用户

发布于 2016-04-09 22:04:49

2^32元素的数组基本上是4 GB * size of an element,因此很有可能它不适合内存。

您所得到的错误是:分配程序无法分配足够的空间。您可能想考虑另一种解决方案,而不是分配一个几千兆字节的数组。多了解一些你想要达到的目标,可以帮助你走上正确的轨道!:)

票数 7
EN

Stack Overflow用户

发布于 2016-04-09 22:18:31

对于node.js,只需安装大阵列

使用非顺序块内存分配的可调整大小的数组。增长或缩小数组不需要重新分配整个数组。当您需要跟踪几万亿个数据点时,非常有用。

票数 4
EN

Stack Overflow用户

发布于 2016-04-10 11:53:37

对于一个筛子算法,你只需要为每个数字测试一个位.

查找位集实现(例如https://github.com/tdegrunt/bitset)。当您在其中设置位时,这个将动态增长。您可以设置和获取位,每个位都会告诉您n是否是素数。

但是,我建议您使用最大100,而不是2^32进行测试.因为这会很慢..。

实际上,在我的Mac电脑上,位集会在10到100米之间中断。我想他们不使用字节数组。

因为它不那么冗长.

代码语言:javascript
复制
Bitset = require 'bitset'

sieve = (maxSize)=>

    mark = (bitset)->
        markMultiplesOf = (n)->
            bitset.set(n*each) for each in [2..(maxSize / n)]

        markMultiplesOf each for each in [2..(maxSize / 2)] when bitset.get(each) is false

    showPrimes = (bitset)->
        console.log each for each in [0..(bitset.length())] when bitset.get(each) is false

    timestamp = Date.now()

    bitset = new Bitset(maxSize)
    mark bitset, maxSize

    console.log "took #{Date.now() - timestamp} ms"
    showPrimes(bitset)

sieve(10000000) # takes < 4s
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36523233

复制
相关文章

相似问题

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