就性能而言,为矩阵分配一个连续的内存块与分配多个不相邻的内存块相比有什么好处?例如,不要像这样编写代码:
char **matrix = malloc(sizeof(char *) * 50);
for(i = 0; i < 50; i++)
matrix[i] = malloc(50);
如果我要写一个程序,给我50个不同的块,每个块有50个字节,还有一个包含50个指针的块。相比之下,如果我写:
char **matrix = malloc(sizeof(char *) * 50 + 50 * 50);
char *data = matrix + sizeof(char *) * 50;
for(i = 0; i < 50; i++) {
matrix[i] = data;
data += 50;
}
给我一个连续的数据块,有什么好处吗?避免缓存未命中是我唯一能想到的,即使这只针对小量数据(足够适应缓存),对吗?我在一个小应用程序上进行了测试,并注意到了一点速度提升,想知道原因。