Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;三维阵列随机存取性能_C++_Arrays - Fatal编程技术网

C++ C++;三维阵列随机存取性能

C++ C++;三维阵列随机存取性能,c++,arrays,C++,Arrays,我想提高存储3D地图的应用程序的性能。目前,它使用QtreeNode作为存储地图的结构。然而,使用坐标x、y、z访问随机位置的复杂性为log2n 我想在静态数组中存储我知道有90%的时间可以访问的部分地图,定义如下: Tile*tilerray[16][3500][3500]/[z,x,y]; 我将z设置为第一维度的原因是,应用程序迭代通常是逐层逐行进行的,如下所示: 用于(int32_t z=fromZ;z内存中的位置是通过偏移指针来计算的,例如,对于x,y,z,地址是tilerray+35

我想提高存储3D地图的应用程序的性能。目前,它使用QtreeNode作为存储地图的结构。然而,使用坐标x、y、z访问随机位置的复杂性为log2n

我想在静态数组中存储我知道有90%的时间可以访问的部分地图,定义如下:

Tile*tilerray[16][3500][3500]/[z,x,y];
我将z设置为第一维度的原因是,应用程序迭代通常是逐层逐行进行的,如下所示:


用于(int32_t z=fromZ;z内存中的位置是通过偏移指针来计算的,例如,对于
x
y
z
,地址是
tilerray+3500*3500*z+3500*x+y
。要获得真正的性能,必须进行一些基准测试,但毫无疑问,这将比标准
QT快得多ree
。复杂性并不是决定速度的唯一因素。如果数组是在堆上分配的,缓存未命中也可能是一个决定因素。
平铺的大小是多少?
?如果您一次扫过地图的大块,并且这是按照布局的顺序进行的,那么存储实际的数据可能会对您有所帮助ATA的顺序是:在代码中放置“代码>瓦片<代码>而不是指向实际数据。但是这完全取决于系统的其他细节。首先,它不清楚,但是你不想单独分配那些<代码>瓦片< /Case> s。第二,在现代C++中,你不想保留原始指针。我必须清理它们。第三,像这样的嵌套C样式数组意味着对每个轴进行单独的查找(IIRc)。为什么不使用大小为
16*3500*3500
std::vector
?(理想情况下,您应该将其包装在类中,以提供良好的3D索引。)另外,它是密集的还是稀疏的?既然你在优化,我建议你做两件事。1.测量。2.发布,你到底是如何使用你的数据的。因为这很重要。例如,你的想法要求你重写所有使用它的算术运算,以使z,x,y对缓存友好。否则你会有巨大的性能问题。如果你的数据是解析,然后树可能会更好。等等,我们没有太多的数据,所以我们猜测。