FPC VS DCC32

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Написал указанный выше тест.
У меня так:
а) заполнение массива строками с вызовом IntToStr(i):
- lazarus - 4063 мс;
б) холостой проход по циклу через for:
- lazarus - 31 мс;
в) заполнение массива пустыми строками:
- lazarus - 672 мс;

Накидал функцию преобразования int32 в строку (методом div) и получил
г) Заполнение массива строками с вызовом самопальной функции MyToStr(i)
- lazarus - 2328

Кстати, если преобразование оформить не функцией, а процедурой

Код: Выделить всё

 for i := 0 to SIZE_TST_ARRAY - 1 do
      MyToStr(i, mas[i]);

то получаем
г) Заполнение массива строками с вызовом самопальной процедурой MyToStr(i, Res)
- lazarus - 1718
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

хмм. весьма интересно:

взял для теста функцию номер один :). В результате 3238,
убрав лишний "проход", получил 2449...

отсюда вывод: то что удобно (знакомо и т.д.), не есть всегда быстро....


в результате функция стала:

Код: Выделить всё

var
   i: int32;
   ms: DWORD;
   s : string;
begin
  ms := GetTickCount;
  for i := 0 to SIZE_TST_ARRAY - 1 do
      System.Str(i, mas[i]);
  System.Str(GetTickCount - ms, s);
  lblResult1.Caption := s;


Добавлено спустя 1 час 32 минуты 4 секунды:
а используя while ... do begin получился результат 1700 - 1800...

Есть нюанс: все тесты в лине... По практике, в винде должно быть быстрее.

Как в дельфине будет не знаю и знать не желаю :twisted:
Ответить