在C:访问像2D数组一样使用的char*= malloc()比使用array [] []更快吗?

Chr*_*ber 1 c memory arrays optimization

刚刚遇到这个最近的问题:

如何在C中动态分配2D数组?

我只是想知道:当我使用简单的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;
     }
}
Run Code Online (Sandbox Code Playgroud)

这会(明显)快于创建"传统"2D阵列时的速度吗?因为在前者中我通过顺序访问实现缓冲区优化?还是我错了?

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;
     }
}  
Run Code Online (Sandbox Code Playgroud)

谢谢你的解释.

mfr*_*fro 5

如果您通过[row][column]或访问内存区域中的特定元素,则将(小)开销留给动态内存分配,没有区别* (row * rowsize + column).它基本上只是符号的差异.

所以你的问题更像是"将数组定义为"第一行"比"第一列"更好吗?

答案是:只有您知道,因为您是根据应用程序的需要定义内存区域的访问模式的人.

除非你处理非常大的数组(其中一个维度大于适合你的缓存的数据),否则我不会想太多.