Я бы хотел повысить производительность приложения, в котором хранится 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-битной, а размер указателя составляет 8 байт, и она занимает 1,5 ГБ ОЗУ.
Я хотел бы спросить, есть ли проблема со случайным доступом к такому массиву с x, y, zкоординаты.По логике, сложность должна быть O (1), но я не уверен, как процессор вычисляет точную позицию в памяти.
Я не боюсь чрезмерного использования ОЗУ.