测量事物,第 2 部分。我现在有两个程序。第一个是 C 语言,用 gcc -O2 编译:
#include <stdio.h>
#include <time.h>
#define BIG 1000000
int f( int n ) {
int r = 0, i = 0;
for ( i = 0; i < 1000; i++ ) {
r += i;
if ( n == BIG - 1 ) {
return -1;
}
}
return r;
}
int main() {
clock_t start = clock();
int i = 0, z = 0;
for ( i = 0; i < BIG; i++ ) {
if ( (z = f(i)) == -1 ) {
break;
}
}
double t = (double)(clock() - start) / CLOCKS_PER_SEC;
printf( "%f\n", t );
printf( "%d\n", z );
}
第二个是C++,有异常处理,用g++ -O2编译:
#include <stdio.h>
#include <time.h>
#define BIG 1000000
int f( int n ) {
int r = 0, i = 0;
for ( i = 0; i < 1000; i++ ) {
r += i;
if ( n == BIG - 1 ) {
throw -1;
}
}
return r;
}
int main() {
clock_t start = clock();
int i = 0, z = 0;
for ( i = 0; i < BIG; i++ ) {
try {
z += f(i);
}
catch( ... ) {
break;
}
}
double t = (double)(clock() - start) / CLOCKS_PER_SEC;
printf( "%f\n", t );
printf( "%d\n", z );
}
我认为这些回答了对我上一篇文章的所有批评。
结果:执行时间使 C 版本比 C++ 版本有 0.5% 的优势,但有例外,而不是其他人谈论的 10%(但未演示)
如果其他人可以尝试编译和运行代码(应该只需要几分钟)以检查我是否在任何地方都没有犯过可怕而明显的错误,我将非常感激。这就是所谓的“科学方法”!