关于C和C++,还有c#,还有java程序的速度问题!

为了感性的评价c、c++、java,C#这几种语言的性能,我做了了一下测试。

请看下面测试成绩表:

 

从我做的几项测试看,在windows平台上,性能最好的依然是c/c++, 但是C#性能也不错,比较接近C++了。

性能差一点是java,但是也差不太多,Java在递归计算方面优化的非常好,成绩甚至超过MinGW编译的C和C++程序。但是java的性能要超过C和C++,从我的测试看,基本不可能。埃拉托色尼质数过滤算法(Sieve of Eratosthenes),网上很多人说java快,但是就我实测,java依然比c和c++慢20%-50%。(我的测试数据:c++ 1018ms  java 1335ms 运行10次求的平均值)



 

微软的VC2010代码优化做的非常好,特别是递归特性超过MinGW编译器一倍!其他方面,GCC和VS2010基本打平。

 

就C语言和C++,我做的几个测试性能基本等同。C略微快那么一点点。基本可以忽略。

 

我的测试代码是在不同的语言下实现相同的功能,采用相同的算法,但是代码不完全相同,因为每个语言有些语法是不同的。

 

下面列出测试代码:

先看C语言的:

首先要实现计算时间的功能:

文件:stopwatch.h

#ifndef STOPWATCH_H_INCLUDED #define STOPWATCH_H_INCLUDED void init_stopwatch(); void start_stopwatch(); void end_stopwatch(); double get_stopwatch_ms(); #endif // STOPWATCH_H_INCLUDED 

  file:stopwatch.c

#include <windows.h> #include "stopwatch.h" LARGE_INTEGER beginticks; LARGE_INTEGER endticks ; LARGE_INTEGER frequency; void init_stopwatch() { beginticks.QuadPart=0; endticks.QuadPart=0; frequency.QuadPart=0; QueryPerformanceFrequency(&frequency); } void start_stopwatch() { QueryPerformanceCounter(&beginticks); } void end_stopwatch() { QueryPerformanceCounter(&endticks); } double get_stopwatch_ms() { unsigned long long cost=(unsigned long long)(endticks.QuadPart-beginticks.QuadPart); double millsecond=(double)cost*1000.0/(double)frequency.QuadPart; return millsecond; }  

 

然后实现了测试函数

filename:work_test.h

#ifndef WORK_TEST_H_INCLUDED #define WORK_TEST_H_INCLUDED double add_test(); double mul_test(); double div_test(); double fib_test(); void auto_test(double (*test_item)()); #endif // WORK_TEST_H_INCLUDED 

filename:work_test.c

#include "work_test.h" #include "stopwatch.h" #include <stdio.h> #include <stdlib.h> double add_test() { int count=10000000,i=0,j=0,count2=10; double sum=0.0; for(i=0;i<count2;i++) for(j=0;j<count;j++) sum+=j; return sum; } double mul_test() { int count=10000*10000,i=0; double sum=0.0; for(i=1;i<count;i++)sum*=i; return sum; } double div_test() { int count=10000*10000,i=0; double sum=0.0; for(i=1;i<count;i++)sum/=i; return sum; } unsigned long fib(unsigned long n) { if (n < 2) return(1); else return(fib(n-2) + fib(n-1)); } double fib_test() { return (double)fib(30); } void auto_test(double (*test_item)()) { const int test_count=10; double test_time=0.0,ret=0.0; int run_count=0; init_stopwatch(); for(run_count=0;run_count<test_count;run_count++) { ret=0.0; start_stopwatch(); ret=(*test_item)(); if(ret>0)end_stopwatch(); else end_stopwatch(); test_time+=get_stopwatch_ms(); } printf("work cost average time(10)=%f/n",test_time/test_count); }  

 

 

 

 

 

 

 

 

 

 

 

 

最后是主函数实现:

filename:main.c

 

#include <stdio.h> #include <stdlib.h> #include "work_test.h" int main() { auto_test(add_test); auto_test(fib_test); auto_test(mul_test); auto_test(div_test); return 0; }

 

 






 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,C++,c,测试,C#,Integer)