這是在Linux/GUN C程序:C程序中的CPU高速緩存無效?
#include<stdio.h>
#include<sys/time.h>
#define Max 1024*1024
int main()
{
struct timeval start,end;
long int dis;
int i;
int m=0;
int a[Max];
gettimeofday(&start,NULL);
for(i=0;i<Max;i += 1){
a[Max] *= 3;
}
gettimeofday(&end,NULL);
dis = end.tv_usec - start.tv_usec;
printf("time1: %ld\n",dis);
gettimeofday(&start,NULL);
for(i=0;i<Max;i += 16){
a[Max] *= 3;
}
gettimeofday(&end,NULL);
dis = end.tv_usec - start.tv_usec;
printf("time2: %ld\n",dis);
return 0;
}
輸出:
時間1:7074
時間2:234
這是一個很大的距離
這個Java程序:
public class Cache1 {
public static void main(String[] args){
int a[] = new int[1024*1024*64];
long time1 = System.currentTimeMillis();
for(int i=0;i<a.length;i++){
a[i] *= 3;
}
long time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
time1 = System.currentTimeMillis();
for(int i=0;i<a.length;i += 16){
a[i] *= 3;
}
time2 = System.currentTimeMillis();
System.out.println(time2 - time1);
}
}
輸出:
它nealy相同
與CPU高速緩存。爲什麼他們有這麼多的差異?在C編程中,Cpu Cache無效?
要查找執行時間,請使用System.nanoTime()而不是System.currentTimeMillis() – SpringLearner
在「C」代碼中,語句「a [Max] * = 3」將修改內存超過數組末尾。你是不是指'一個[我]'? – Blastfurnace
是的,這是一個錯誤,一個[我]是正確的。 –