7

如果我声明一个 2d c 样式的数组

int data[X][Y]

我假设编译器会将其创建为一个类似于

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

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

int data[X][Y][Z]?

编译器是否将其创建为连续的内存块并只是对偏移量进行一些摆弄?

我通常将单个向量用于具有偏移 row * NumCols + col 的 2d 数组,并有一个内联函数来为我计算它,但我对这个问题的 3d 数组感兴趣。我还应该问是否有人用单个向量做到了这一点,以及偏移逻辑是什么。

4

3 回答 3

8

是的,C 中任意顺序的多维数组都是连续的。可以这么说,它们只是“数组的数组”。在comp.lang.c 常见问题解答第 6 节,数组和指针中提供更多信息。

于 2013-10-23T17:21:59.770 回答
6

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

于 2013-10-23T17:22:14.420 回答
2

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

于 2013-10-23T17:22:36.207 回答