我想提高存储3D地图的应用程序的性能。当前,它使用QtreeNode作为存储地图的结构。但是,访问坐标为x,y,z的随机位置的复杂度为log2n。
我想在90%的时间内将我知道的部分地图存储在定义为的静态数组中:
Tile* tileArray[16][3500][3500] // [z, x, y];
我将z设置为第一维的原因是应用程序迭代通常是逐层和逐行完成的,如下所示:
for (int32_t z = fromZ; z <= toZ; ++z) {
for (int32_t x = fromZ; x <= toX; ++x) {
for (int32_t y = fromY; y <= toY; ++y) {
Tile* accessTile = tileArray[z][x][y];
}
}
}
Tile *是指向数据结构的指针,该数据结构包含有关3D地图上该位置的信息。由于系统为64位,指针大小为8byte,因此总共需要1.5GB的RAM。
我想问一下用x,y,z坐标随机访问这样的数组是否有问题。从逻辑上讲,复杂度应为O(1),但我不确定CPU如何计算内存中的确切位置。
我不担心RAM使用过多。