繁体   English   中英

3d数组在内存中是连续的,那么2d呢?

[英]Is a 3d array contiguous in memory, what about a 2d?

如果我声明一个2d c风格的数组

int data[X][Y]

我假设编译器会将其创建为类似于的单个数组

int data[X*Y]但这有保证吗?

让我们假设为简单起见,我们在x86架构上使用标准编译器。 那怎么样?

int data[X][Y][Z]

编译器是否将其创建为连续的内存块,并且只是对偏移进行一些调整?

我通常使用单个向量作为带有偏移行* NumCols + col的2d数组,并且有一个内联函数来为我计算它,但我对这个问题的3d数组感兴趣。 我还应该问一下是否有人用一个向量做了这个,也有偏移逻辑。

是的,C中任何顺序的多维数组都是连续的。 他们只是“数组阵列”,可以这么说。 还有更多关于comp.lang.c常见问题解答,第6节,数组和指针

生成的数组将在分配给您的进程的虚拟内存区域中连续。 阵列在物理内存中可能不是连续的,但这对您来说无关紧要。

数组中的元素保证是连续的,因此两种情况下的布局都是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM