游戏生命记忆问题:3D阵列(世代,x,y)。可以最小化内存使用?

时间:2014-01-15 01:59:08

标签: javascript arrays memory memory-management

编辑:一些有用的回复让我意识到我忘了包含一个关键的细节。我也在检查振荡,这意味着我必须存储每一代的信息。

我正在重新创建JavaScript中的生命游戏,需要一个3D数组。据我所知,我必须在开始填充数据之前声明数组的大小。这是不幸的,因为我无法知道比赛将持续多少代。如果我把它设置为低,游戏可能会突然停止。如果我将其设置为高,浏览器可能会因填满内存而崩溃。这是我用于声明3D矩阵的代码。

    cellMatrix = new Array();

    function declareMatrix() {

        for (var g = 0; g < maxGenerations; g++) {

            cellMatrix[g] = new Array();

            for (var x = 0; x < width; x++) {

                cellMatrix[g][x] = new Array();

                for (var y = 0; y < height; y++) {

                    cellMatrix[g][x][y] = new Array();
                }
            }
        }
    }

主要问题:有更多内存效率的方法吗?

没有单一正确答案的奖金问题(对不起):内存使用量是多少?

2 个答案:

答案 0 :(得分:1)

是的,有一种更节省内存的方法:使用二维数组并动态计算下一代。如果你的用例需要来回跳过很多,你也可以存储每一个,比如千分之一代并将它们作为起点。像HashLife这样的高效算法如果您还没有使用过,可能会有所帮助。

实际上,大多数事情都是时间/代码复杂性/内存权衡。总是存储每个单元而不是4+字节。

  

据我所知,在开始填充之前,我必须声明一个数组的大小。

不在JavaScript中。

答案 1 :(得分:0)

为什么在开始填充数组之前必须声明数组的大小?

您始终可以使用新项目扩展矩阵。好吧,也许你可以告诉我们你想用矩阵做什么。

在我看来,对于不太复杂的东西来说,太多的内存使用量超过了100 MB。但也许你更担心数组的大小,这取决于你存储在它中的内容。