[英]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.