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 чем в Делфи я больше нигде не видел.