天天看點

fun2比fun1稍快點

fun2比fun1稍快點

 運作環境:WinXP VS2005(VC8)

 核心代碼:

 #include <iostream>

 using namespace std ;

 #include <time.h>


 #define WAN (10000)

 const int iNum = WAN*WAN*3;

 void fun1(int* p)

 {

     for( int i = 0 ; i < iNum ; i++ )

     {

         p[i] = i;

     }

 }


 void fun2(int* p)

 {

     for( int i = 0 ; i < iNum ; i+= 4  )

     {

         p[i] = i;

         p[i+1] = i+1;

         p[i+2] = i+2;

         p[3+3] = i+3 ;

     }

 }


 測試程式一:

 void main()

 {

     int * p = new int[iNum];

     int x1 = time(NULL);

     fun1(p);

     int x2 = time(NULL);

     fun2(p);

     int x3 = time(NULL);

     cout << (long)(x2-x1) << "秒 " << (long)(x3-x2) << "秒";

     delete [] p ;

 }

 五次的運作結果:

 4,3

 5,2

 4,3

 5,2

 4,3


 測試程式二fun2在前,fun1在後:

 void main()

 {

     int * p = new int[iNum];

     int x1 = time(NULL);

     fun2(p);

     int x2 = time(NULL);

     fun1(p);

     int x3 = time(NULL);

     cout << (long)(x2-x1) << "秒 " << (long)(x3-x2) << "秒";

     delete [] p ;

 }

 五次的運作結果:

 3,4

 3,5

 3,4

 2,5

 3,4
總結3億次循環,可以節約1秒左右。

p[3+3] = i+3 ; 弄錯了,改正。 時間精确到毫秒。
#include <iostream>
 using namespace std ;
 #include <time.h>

 #define WAN (10000)
 const int iNum = WAN*WAN*3;
 void fun1(int* p)
 {
     for( int i = 0 ; i < iNum ; i++ )
     {
         p[i] = i;
     }
 }

 void fun2(int* p)
 {
     for( int i = 0 ; i < iNum ; i+= 4  )
     {
         p[i] = i;
         p[i+1] = i+1;
         p[i+2] = i+2;
         p[i+3] = i+3 ;
     }
 }

 void Test()
 {
     int * p = new int[iNum];
     long x1 = clock();
     fun1(p);
     long x2 = clock();
     fun2(p);
     long x3 = clock();
     cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;
     delete [] p ;
 }

 void main()
 {
    Test();
    Test();
    Test();
    Test();
    Test();
 }結果為:
4734豪秒 3547豪秒
 5078豪秒 3047豪秒
 4453豪秒 3047豪秒
 4468豪秒 2954豪秒
 4531豪秒 3063豪秒換一下Test中fun1,fun2的位置:
 void Test()

 {

     int * p = new int[iNum];

     long x1 = clock();

     fun2(p);

     long x2 = clock();

     fun1(p);

     long x3 = clock();

     cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;

     delete [] p ;

}
結果為:
3016豪秒 4313豪秒
 2938豪秒 4344豪秒
 2953豪秒 4515豪秒
 2875豪秒 4343豪秒
 2875豪秒 4329豪秒結論:也是快1.5秒。