gpt4 book ai didi

c - 二维数组与一维数组的性能

转载 作者:太空狗 更新时间:2023-10-29 16:20:38 26 4
gpt4 key购买 nike

在 C 语言中,m×n 二维数组与长度为 m×n 的一维数组(对于较大的 m 和 n 值)在时间和空间上是否存在差异?使用一维数组访问元素会更快吗?

最佳答案

在 C 中,二维数组只是一维数组的简洁索引方案。就像一维数组一样,二维数组分配单个连续内存块,A[row][col] 表示法类似于说 A[row*NCOLS+col].

通常,如果您要使用一维数组实现自己的多维数组,您会编写一个索引函数:

int getIndex(int row, int col) { return row*NCOLS+col; }

假设您的编译器内联此函数,此处的性能将与您使用二维数组的内置“索引函数”完全相同。

举例说明:

#define NROWS 10
#define NCOLS 20

这个:

int main(int argc, char *argv[]) {
int myArr[NROWS*NCOLS];
for (int i=0; i<NROWS; ++i) {
for (int j=0; j<NCOLS; ++j) {
myArr[getIndex(i,j)] = i+j;
}
}
return 0;
}

应该执行与此相同的操作:

int main(int argc, char *argv[]) {
int myArr[NROWS][NCOLS];
for (int i=0; i<NROWS; ++i) {
for (int j=0; j<NCOLS; ++j) {
myArr[i][j] = i+j;
}
}
return 0;
}

虽然是AraK pointed out ,如果你经常在行中跳跃,并且行非常大,你可能会遇到很多页面错误......在这种情况下,自定义索引功能(行和列切换)可能会有所帮助,但也可以简单地更改将二维数组中的哪些维度视为行,将哪些维度视为列。

关于c - 二维数组与一维数组的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1242705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com