[RostovOnDon.pm] Perl 5.10

Владислав Жук Vladislav.Zhuk на rt.ru
Ср Сен 17 00:11:58 PDT 2008


Здравствуйте, Rostov-on-Don Perl Mongers!

Вы писали 17 сентября 2008 г., 9:19:35:

>>> for my $i (1..10000000) {$i++}
>>> на одной версии интерпретатора.

>> Уважаемые коллеги, при таком подходе 99% времени уходит на создание
>> массива из 10 миллионов элементов (1..10000000), а не на выполнение
>> поставленной задачи тестирования.

> Зачем массив-то создавать? :-)

Ну, в документации написано:
Оператор диапазона (..) возвращает массив значений с шагом 1, лежащих
в диапазоне, указанных левым и правым операндами, начиная со значения,
указанного левым операндом...

И вот результат:

# time perl -e'for my $i (1..10000000) {$i++}'
9.399u 0.007s 0:09.68 97.0%     15+381k 0+0io 0pf+0w

# time perl -e'for (my $i = 1, $i <=10000000, $i++) {$i+1}'
0.011u 0.011s 0:00.02 100.0%    12+132k 0+0io 0pf+0w

т.е. цикл с применением оператора диапазона выполняется в 845 раз
медленнее и кушает в разы больше памяти.

В статьях о программлении на Перле упоминают, что конструкции типа
for (1..10000000) могут не только внести недецкие тормоза, но и
откушать достаточно много памяти.

-- 
С уважением, Владислав




Подробная информация о списке рассылки RostovOnDon-pm