早以听闻说是c++的运行速度比c是慢了不少,所以写了个小程序来测试下,到底有多慢。
1 #include2 #include 3 #include 4 int main() 5 { clock_t a=clock(); 6 int i,j,k; 7 char c[10000]={ "assdasdxzczasdxzczzsdaaaasdxzczzsdaaazsdaaaaaaaaaaaaaasdasfsdxzczzsdaaaaaaaaaaaaaasdasfzvfasdqweasfassdxzczzsdaaaaaaaaaaaaaasdasfzvfasdqweasfassdxzczzsdaaaaaaaaaaaaaasdasfzvfasdqweasfaszvfasdqweasfasf"}; 8 int l = strlen(c); 9 10 for(i = 0 ; i < strlen(c); i++)11 for(j = 0 ; j < strlen(c); j++)12 for(k = 0 ; k < strlen(c); k++)13 ;14 15 clock_t b=clock();16 17 printf("%lf,%d",(double)(b-a)/CLK_TCK,l);18 }
调用了time。h里面的clock_t类,使用clock函数获取两次的系统始终,因为获取的是震荡次数所以还需要除以clk-tck来计算出按秒的时间。最后就是对比两个函数的消耗时间了,为了让效果明显点,据使用200长度的字符数组,然后是三重循环,这样执行,strlen()函数的次数为200的3次方。八百万次
运行几次的时间大概都是1s上下,然后把程序中的strlen替换为固定的变量l那么就会单独只运行八百万次,
可以对比出大概的时间是很慢的,大概慢了4~5倍。
然后我又想测试下c++中的cin和cout是对比c中的scanf和printf对比下有多慢。
#include#include #include #include using namespace std; int main() { clock_t a=clock(); int i,j,k; int l = 100; for(i = 0 ; i < l; i++) for(j = 0 ; j < l; j++) cout<<"a"; ;; clock_t b=clock(); for(i = 0 ; i < l; i++) for(j = 0 ; j < l; j++) printf("a"); ;; clock_t c=clock(); printf("\n\n%lf\n%lf",(double)(b-a)/CLK_TCK,(double)(c-b)/CLK_TCK); }
执行一万次的情况下,结果是
可以说确实是稍微慢了些,但是这里也有意外的问题,就是如果使用这个函数导致运行的速度变慢,那么如果我运行的次数和时间会成一定的比例,那么如果我把运行次数变为更大些呢?
我扩大了十倍之后的结果就是
并没有完全按全比例变大。
这里的问题就可能和cpu在运算的时候可能会把常用的放在内部直接的寄存器中这样来减少读取次数和运行速度的方法,无论如何今天可以算是能够计算出两种方法的时间上的优劣了。。