![]() |
|
#13
|
||||
|
||||
![]() Вы не то тестировали. Ни для кого не секрет, что вывод через COUT в студии невероятно медленный. Я провел другой тест на вашем же примере:
Делфа: Код:
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. Код:
#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[]) { long c; int i,*j; j = new int[100]; c=clock(); for (i = 0; i < REPEAT_NUM; i++) j[i%100] = Fact(i%2+14); c=clock()-c ; cout << "Time is: " << c << "\n"; cout << "Press ENTER.."; cin >> i; return 0; } int Fact(int N) { if (N == 1 || N == 0) return 1; else return N * Fact(N - 1); } Результат: Делфи ХЕ - 1.7 сек, Студия - 0.9 сек. Такие сложности (с остатком от деления и записью в массив) для обмана оптимизации студии. Было так: Код:
for i:=1 to REPEAT_NUM do Fact(15); Потом сделал так: Код:
for i:=0 to REPEAT_NUM-1 do j[i mod 100]:=Fact(15); В результате сделал такой извратский тест. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 09.01.2012 в 15:19. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Dem0Men (03.02.2012)
|