彩票走势图

编译器性能比较

转帖|其它|编辑:郝浩|2009-02-19 14:17:35.000|阅读 760 次

概述:编译器性能之间的区别!

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

在网上看到一篇C++编译器性能比较的文章

于是一时兴起,便把代码复制下来改了改,顺便改个了pascal的版本在自己机器上试了一下。

c++代码

#include <stdio.h>
#include 
<stdlib.h>
#include 
<math.h>

// Function to be integrated
// Define and prototype it here
// | sin(x) |

#define INTEG_FUNC(x) fabs(sin(x))
    
// Prototype timing function

#ifdef __cplusplus
extern "C" {
#endif
unsigned 
int __declspec(dllimport) __stdcall GetTickCount();
#ifdef __cplusplus
}
#endif

int main(void)
{
    
// Loop counters and&nbsp;number of interior points
    unsigned int i, j, N;
    
// Stepsize, independent variable x, and&nbsp;accumulated sum
    double step, x_i, sum;
    
//&nbsp;Timing variables for evaluation
    unsigned int start, finish, duration, clock_t;
    
// Start integral from
    double interval_begin = 0.0;
    
// Complete integral at
    double interval_end = 2.0 * 3.141592653589793238;
    
// Start timing&nbsp;for the&nbsp;entire application
    start = GetTickCount();
    printf(
" \n");
    printf(
" Number of | Computed Integral | \n");
    printf(
" Interior Points | | \n");
    
for (j=2;j<27;j++)
    {
    printf(
"------------------------------------- \n");
    
// Compute the number of (internal rectangles + 1)
    N = 1 << j;
    
// Compute stepsize for N-1 ;internal rectangles
    step = (interval_end - interval_begin) / N;
    
// Approx. 1/2 area in first rectangle: f(x0) * [step/2]
    sum = INTEG_FUNC(interval_begin) * step / 2.0;
    
// Apply midpoint rule:
    
// Given length = f(x), compute the area of the
    
// rectangle of width step
    
// Sum&nbsp;areas of internal rectangle: f(xi + step) * step
    for (i=1;i<N;i++)
    {
&nbsp;    &nbsp;  x_i 
= i * step;
    &nbsp;   sum 
+= INTEG_FUNC(x_i) * step;
    }
    
// Approx.&nbsp;1/2 area in last rectangle: f(xN) * [step/2]
    sum += INTEG_FUNC(interval_end) * step / 2.0;
    printf(
" %10d | %14e | \n", N, sum);
    }
    finish 
= GetTickCount();
    duration 
= (finish - start);
    printf(
" \n");
    printf(
" Application Clocks&nbsp;= %d ms \n", duration);
    printf(
" \n");
    getchar();
    
return 0;
}

 

pascal代码

program Test;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils;

var
  i, j, N:      cardinal;
  start, duration: cardinal;
  step, x_i, sum: double;
  interval_
begin: double = 0.0;
  interval_
end: double = 2.0 * 3.141592653589793238;
begin
  start :
= GetTickCount;
  Writeln(
'');
  Writeln(
'Number of | Computed Integral | ');
  Writeln(
'Interior Points | | ');
  
for j := 2 to 26 do
  
begin
    Writeln(
'------------------------------------- ');
  ;  N    :
= 1 shl j;
    step :
= (interval_end - interval_begin/ N;

    sum :
= Abs(Sin(interval_begin)) * step / 2.0;

    
for i := 1 to N - 1 do
    
begin
      x_i :
= i * step;
      sum :
= sum + Abs(Sin(x_i)) * step;
    
end;

    sum :
= sum + Abs(Sin(interval_end)) * step / 2.0;
    Writeln(Format(
' %10d | %14.7e | ', [N, sum]));
  
end;
  duration :
= GetTickCount - start;
  Writeln(
'');
  Writeln(Format(
'Application Clocks =&nbsp;%d ms&nbsp;', [duration]));
  Writeln(
'');
  Readln;
end.

 

我的机器环境是windows xp sp3 + intel core2 1.5G

C++编译器使用的是g++4.3.0-mingw32,c++builder 2009的bcc32,和vs2008的cl

pascal编译器使用的是开源的freepascal编译器fpc2.2.3和dephi 2009的dcc32

开启优化测试结果如下(单位:ms)

g++     24531     24407     24390
bcc32   18078     17906     17938 
cl          8922       8875       8875  
fpc       12046      12015     12016   
dcc32 &nbsp; 13312  &nbsp;   13313     13297

结果显示 cl>fpc>dcc32>bcc32>g++


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:博客园

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP