[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