最近在寫的一個項目需要優化處理速度,我寫了一下程序來測試指針賦值與指針判斷的速度比較。結果讓我大吃一驚。
#include
#include
#include
int main(int argc, char *argv[]) {
int j;
int * tmp;
clock_t start = clock();
int i=0;
tmp=malloc(sizeof(int *));
for(;i<100000000;i++){
tmp[0]=2324;
tmp[1]=32423;
tmp[2]=90123;
tmp[3]=23421;
}
clock_t end = clock();
printf(程序運行時間為: %ld ms
,end - start);
start = clock();
i=0;
for(;i<100000000;i++){
if(tmp[0]==2356){
j=9089;
}
if(tmp[1]==234){
j=7812;
}
if(tmp[2]==2342){
j=2345;
}
if(tmp[3]==23423){
j=12032;
}
}
end = clock();
printf(程序運行時間為: %ld ms,end - start);
return 0;
}
結果如下:
程序運行時間為: 296 ms
程序運行時間為: 344 ms
我又運行了數次,結果都是前一段程序比後一段程序塊40~50ms左右。猜測可能是因為我在for循環中一直賦同樣的值,編譯器做了相關優化,可是如果那樣的,不可能只快40~50ms。
第一小部分的程序主體是:
for(;i<100000000;i++){
tmp[0]=2324;
tmp[1]=32423;
tmp[2]=90123;
tmp[3]=23421;
}
第一小部分的程序主體是:
for(;i<100000000;i++){
if(tmp[0]==2356){
j=9089;
}
if(tmp[1]==234){
j=7812;
}
if(tmp[2]==2342){
j=2345;
}
if(tmp[3]==23423){
j=12032;
}
}
測試環境是 :Dev C++
同樣的,每次都訪問了指針指向的地址,結果賦值竟然比判斷快。