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