刚刚偶然发现了这个最近的问题:
How can I have a dynamically allocated 2D array in C?
我只是想知道:当我使用简单的 malloc 创建一个 2D 数组并像这样自己管理类似 2D 的访问时:
int row=100;
int col=100;
char* buffer = malloc(sizeof(char)*row*col);
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
buffer[i*col+j]=128;
}
}
这会比创建“传统”二维数组(因为在前者中我通过顺序访问实现缓冲区优化)快得多吗?还是我想错了?
int row=100;
int col=100;
char buffer[row][col];
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
buffer[i][j]=128;
}
}
感谢您的解释。
最佳答案
抛开动态内存分配的(小)开销,如果您通过 [row][column]
或 * (row * 行大小 + 列)
。这基本上只是符号上的差异。
所以您的问题更像是“将数组定义为“行优先”比“列优先”更好吗?
答案是:只有您自己知道,因为您是根据应用程序的需要定义内存区域访问模式的人。
除非您处理非常大的数组(其中一维大于适合您的缓存的维数),否则我不会考虑太多。
关于c - 在 C : Is it faster to access a char* = malloc() used like a 2D array than an array[][]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29689898/