#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
float timedifference_msec(struct timeval t0, struct timeval t1) {
return (t1.tv_sec - t0.tv_sec) * 1000.0f + (t1.tv_usec - t0.tv_usec) / 1000.0f;
}
int main()
{
struct timeval t0;
struct timeval t1;
float elapsed;
int ** a = malloc(10000*sizeof(int*));
for(int i = 0; i < 10000; i++){
a[i] = malloc(10000*sizeof(int));
}
gettimeofday(&t0, 0);
for(int i = 0; i < 10000; i++){
for(int j = 0; j< 10000; j++){
a[j][i] = 0;
}
}
gettimeofday(&t1, 0);
elapsed = timedifference_msec(t0, t1);
printf("%f\n", elapsed);
gettimeofday(&t0, 0);
for(int i = 0; i < 10000; i++){
for(int j = 0; j< 10000; j++){
a[i][j] = 0;
}
}
gettimeofday(&t1, 0);
elapsed = timedifference_msec(t0, t1);
printf("%f", elapsed);
return 0;
}
为什么第一个实现比另一个更快?
编辑:当我替换时,为什么我会更快:
int (*a)[num] = malloc(num*num*sizeof(int));
memset(&a, 0, 10000*10000*sizeof(int));