我有一个二维数组SomeData* data[4096][4096]
。在这里,数据沿最后一个坐标是连续的,因此由于内存位置的原因,在y坐标上进行迭代比在x坐标上进行迭代要快。但是,我拥有的访问模式是我查看一个条目,然后查看两个坐标中的附近邻居,即data [x] [y]以及data [x-1] [y-1],data [x +1] [y + 1]等
如果我可以分配此数组以使较小的2d子块在内存中连续,则可以加快速度。
我说分配,但是我怀疑这里的解决方案是正常分配2d数组,然后对索引做一些技巧,这样我就可以连续访问2d块。换句话说,我想要一些可以转换坐标的查找函数,但是我无法立即看到它应该是什么。
SomeData* data[4096][4096];
SomeData* lookup(size_t x, size_t y) {
//??? Some logic to translate x,y such that 2d blocks are accessed contiguously.
}
保证数据数组的两个维度均为2的幂。