Итак, давайте выполним 2 скрипта, и убедимся, что ++$x работает быстрее...
Скрипт-1:
#!/usr/bin/perl
my $x = 0;
foreach (1..5_000_000)
{
$x++;
}
perl -d:NYTProf test.pl
nytprofhtml --open
Результат:
Скрипт-2:
#!/usr/bin/perl
my $x = 0;
foreach (1..5_000_000)
{
++$x;
}
perl -d:NYTProf test.pl
nytprofhtml --open
Результат:
Вопрос: Почему ++$x работает быстрее, чем $x++?
Ответ
++$x работает грубо говоря в два шага:
делаем $x + 1
передаем значение.
$x++ (присваиваемый) работает сложнее, его обычно нельзя реализовать без промежуточной копии:
сохраняем значение $x в $temp
делаем $x + 1
передаем значение $temp
P.S.: Не присваиваемый $x++, в умных компиляторах/интерпретаторах, может не отличается от ++$x
P.P.S.: При сильных оптимизациях еще все зависит от прилегающих операций, и при использовании простых типов разница скорее всего вообще пропадет.
Комментариев нет:
Отправить комментарий