【发布时间】:2015-06-23 18:08:08
【问题描述】:
偶然发现了这个最近的问题:
How can I have a dynamically allocated 2D array in C?
我只是想知道:当我使用简单的 malloc 创建一个二维数组并自己管理类似二维的访问时:
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;
}
}
感谢您的解释。
【问题讨论】:
-
在第一种情况下,您可能会使用 int idx = i*col; 获得更快的访问速度; for(int j=0;j
-
另外,索引应该是缓冲区[i*col+j]
-
好的,感谢您的 cmets,尽管关于顺序访问的速度优势的一般问题仍然存在。
-
嗯,这会给我一个价值,但没有解释我关于为什么它更快的理论是否正确......
-
了解哪种理论正确的唯一方法是在您的系统上进行尝试。不同的条件可能会产生不同的结果。
标签: c arrays memory optimization