Chr*_*ber 1 c memory arrays optimization
刚刚遇到这个最近的问题:
我只是想知道:当我使用简单的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)
谢谢你的解释.
如果您通过[row][column]
或访问内存区域中的特定元素,则将(小)开销留给动态内存分配,没有区别* (row * rowsize + column)
.它基本上只是符号的差异.
所以你的问题更像是"将数组定义为"第一行"比"第一列"更好吗?
答案是:只有您知道,因为您是根据应用程序的需要定义内存区域的访问模式的人.
除非你处理非常大的数组(其中一个维度大于适合你的缓存的数据),否则我不会想太多.