скалогрыз писал(а):а в коде BigTest их нет вообще. И это причина тормозов - dword ptr [ebp-NNN] - заставляет процессор оперировать с памятью.
Тогда как BigTest оперирует не с памятью а исключительно с регистрами процессора.
Почему FPC так сделал. Обычно счётчики цикла лежат в регистре, а не памяти процессора, но т.к. у тебя есть вложенный цикл, то регистров (коих мало) на всё не хватит, и FPC генерирует код, который оперирует с памятью. Что вызывает "тормоза" но зато код работает.
В реальной жизни, когда цикл будет делать нечто большее, чем просто присваивать 0 в переменную a, оперирования с памятью не избежать вообще, и скорость сравняется и между циклами и между компиляторами (delphi и fpc).
Всё это классно и с ассемблером может на досуге посмотрю что-то. Но между Т1 и Т2 в обеих случая располагается один и тот же код. И этот один и то же код выполняется по разному. Вот это и удивляет. При чём с точки зрения производительности в Delphi что есть дополнительный вложенный цикл, что нет его результат один и тот же в районе 1970 тиков. В ХЕ2 скорость выполнения такой же программы и вовсе плавает от тех же 1970 до аж 10000. Да, есть вот какой вопрос. Как через буфер переносить куски кода в FPC? Его оболочка работает в текстовом режиме и данные буфера не переносятся.