如果我声明了一个二维c风格的数组
int data[X][Y]
我假设编译器会将其创建为类似于
的单个数组 int data[X*Y]
但这有保证吗?
为简单起见,我们在x86架构上使用标准编译器。现在怎么样
int data[X][Y][Z]
?
编译器是否将其创建为连续的内存块并且只是对偏移进行了一些调整?
我通常使用单个向量作为带有偏移行* NumCols + col的2d数组,并且有一个内联函数来为我计算它,但我对这个问题的3d数组感兴趣。我还应该问一下是否有人用单个向量做了这个,也有偏移逻辑。
答案 0 :(得分:8)
是的,C中任何顺序的多维数组都是连续的。他们只是“数组阵列”,可以这么说。 comp.lang.c FAQ, section 6, Arrays and Pointers上的更多信息。
答案 1 :(得分:6)
生成的数组将在分配给您的进程的虚拟内存区域中连续。数组在物理内存中可能不是连续的,但这对您来说无关紧要。
答案 2 :(得分:2)
数组中的元素保证是连续的,因此两种情况下的布局都是相同的。