一、已知结论
- 数组
按行顺序步长为1
访问模式具有最好的空间局部性-数组在内存中顺序存放
- 顺序访问对高速缓存友好
二、测试代码
- 测试数组按行顺序和列顺序的时间倍数差
- 测试数据:
400MB
数组大小 64位机器
六核i7
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define N 10000
#define M 10000
#define LEN N*M void sum(int *a) {
int i, j, res = 0;for (i = 0; i < N; i++) for (j = 0; j < M; j++)res += *(a+N*i+j);
}void sum2(int *a) {
int i, j, res = 0;for (j = 0; j < M; j++) for (i = 0; i < N; i++)res += *(a+N*i+j);
}int main()
{
int *a = (int*)malloc(sizeof(int)*LEN); for (int i = 0; i < LEN; i++)a[i] = 1;clock_t start_time, finish_time;double total_time;start_time = clock();sum2(a); finish_time = clock();total_time = (double)(finish_time - start_time) / CLOCKS_PER_SEC;printf("%fsec\n", total_time);return 0;
}
- 结论:本次测试中 行访问比列访问快
3倍
结果显然与数据大小的机器配置相关