Logo писал(а): Вопрос по сути интересен, но приведите работающий у вас код с используемыми переменными и подключенными модулями.
Это в общем то и есть работающий код: вот объявления переменных для полноты картины
- Код: Выделить всё
var
ar: string;
i: integer;
Timer: Cardinal;
begin
SetLength(ar, 1048576);
FillChar(PChar(ar)^, Length(ar), 'b');
Timer := GetTickCount;
for i := 0 to 10000 do
Pos('aa', ar);
WriteLn('Time: ' + IntToStr(GetTickCount - Timer) + ' ms');
end;
проект создан мастером, тип - консольное приложение, из модулей добавлен только Windows (для GetTickCount).
для оптимизации 64битных программ необходимо использовать 64-разрядные переменные, вместо Integer - Int64. Работа с указателями, также должна быть подогнана под 64.
Я не думаю что переменная цикла могла так сказаться на скорости выполнения - очевидно что все дело в функции Pos которая в свою очередь использует CompareByte на асме - и вот она скорее всего оптимизирована под i386. Кстати более быстрой реализации Pos чем в Делфи я больше нигде не видел.