Вы не то тестировали. Ни для кого не секрет, что вывод через COUT в студии невероятно медленный. Я провел другой тест на вашем же примере:
Делфа:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | program D7Benchmark;
{$APPTYPE CONSOLE}
uses
SysUtils, DateUtils;
const
REPEAT_NUM = 10000000 ;
function Fact(N: integer ): integer ;
begin
if (N = 1 ) or (N = 0 ) then
Result := 1
else
Result := N * Fact(N - 1 );
end ;
type tin = array [ 0..0 ] of integer ;
var
i : integer ;
T1 : TDateTime;
j:^tin;
begin
getmem(j, 100 *sizeof( integer ));
T1 := Now;
for i := 0 to REPEAT_NUM- 1 do
j[i mod 100 ]:=Fact(i mod 2 + 14 );
WriteLn ( 'Num of calculatings:' );
WriteLn (REPEAT_NUM);
WriteLn ( 'Time of working is:' );
WriteLn (MilliSecondsBetween(Now, T1));
WriteLn ( 'PressEnter' );
ReadLn;
end .
|
Студия:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include "stdafx . h"
#include <iostream>
#include <ctime>
using namespace std;
const int REPEAT_NUM = 10000000 ;
int Fact(int N);
int _tmain(int argc, _TCHAR* argv[])
int Fact(int N)
|
GCC у меня нет, его не тестил.
Результат:
Делфи ХЕ - 1.7 сек, Студия - 0.9 сек.
Такие сложности (с остатком от деления и записью в массив) для обмана оптимизации студии.
Было так:
Код:
1 2 | for i:= 1 to REPEAT_NUM do
Fact( 15 );
|
Делфа такой код честно выполняла, студия же нагло пропустила.
Потом сделал так:
Код:
1 2 | for i:= 0 to REPEAT_NUM- 1 do
j[i mod 100 ]:=Fact( 15 );
|
Делфа опять честно выполняла, а студия посчитала один раз и потом вписала во все ячейки, смотрел дизасом (время было ~50мс).
В результате сделал такой извратский тест.