天天看点

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秒。