编辑:一些有用的回复让我意识到我忘了包含一个关键的细节。我也在检查振荡,这意味着我必须存储每一代的信息。
我正在重新创建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();
}
}
}
}
主要问题:有更多内存效率的方法吗?
没有单一正确答案的奖金问题(对不起):内存使用量是多少?
答案 0 :(得分:1)
是的,有一种更节省内存的方法:使用二维数组并动态计算下一代。如果你的用例需要来回跳过很多,你也可以存储每一个,比如千分之一代并将它们作为起点。像HashLife这样的高效算法如果您还没有使用过,可能会有所帮助。
实际上,大多数事情都是时间/代码复杂性/内存权衡。总是存储每个单元而不是4+字节。
据我所知,在开始填充之前,我必须声明一个数组的大小。
不在JavaScript中。
答案 1 :(得分:0)
为什么在开始填充数组之前必须声明数组的大小?
您始终可以使用新项目扩展矩阵。好吧,也许你可以告诉我们你想用矩阵做什么。
在我看来,对于不太复杂的东西来说,太多的内存使用量超过了100 MB。但也许你更担心数组的大小,这取决于你存储在它中的内容。