分配/访问2d数组,以便2d子块是连续的

问题描述 投票:3回答:1

我有一个二维数组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的幂。

c++ algorithm data-structures low-level memory-layout
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.