c - 在 C : Is it faster to access a char* = malloc() used like a 2D array than an array[][]?

标签 c arrays memory optimization

刚刚偶然发现了这个最近的问题:

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/

相关文章:

c - ELF 文件的 .bss 部分应该在哪里占用内存?

c - scanf() 的变体

c - 数组的二进制插入排序不起作用(C 代码)

arrays - Julia 元组数组

python - loadtxt 函数的隐藏错误

java - 如何在 Java 中造成内存泄漏?

javascript - 是否有更有效/更优雅的方式来更改开关盒中函数的数据?

c - 错误 : expression is not assignable ternary operator

c - 编写原子函数

java - 如何读取/更新存储在 map 内的值,该 map 随后位于 Cloud Firestore 的数组内?