|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serge Matveev 2:5030/182 27 Oct 2001 02:41:16 To : All Subject : Вопрос -------------------------------------------------------------------------------- 26 Oct 01 00:49, Serge Matveev wrote to All: SM> Вопрос: Является ли вариант SM> eval(join("+",@votes)) SM> менее эффективным чем простой цикл с суммировнием, а если да, то в чем SM> и на сколько? H-да. Benchmark ни фига не прояснил: Benchmark вариант с eval почти в полтора раза быстрее. Причем и при маленьком количестве элеметов массива (5) и при большом (1000000). Забавно. Проверял при помощи @test = (1..1000000); $t1 = timeit(10000000, '$sum = 0; $sum = eval(join "+", @test);'); $t2 = timeit(10000000, '$sum = 0; $sum += $_ foreach @test'); получил Eval = 19 wallclock secs (17.91 usr + 0.00 sys = 17.91 CPU) For = 28 wallclock secs (27.26 usr + 0.00 sys = 27.26 CPU) С другой стороны, проверка в лоб: @test = (1..1000000); print "Hачали...\n"; $sum = 0; $sum += $_ foreach @test; print "For =>", $sum, "\n"; $sum = 0; $sum = eval(join "+", @test); print "Eval =>", $sum, "\n"; Дает прямо противоположные результаты - вариант с eavl считается _явно_ медленнее - это заметно невооруженным глазом. Вопрос - кто виноват и что делать? Похоже, что оптимизатор в первом случае (с timeit) массив в константу развернул? Ответ на исходный вопрос я получил, но вот как с benchmark работать, я уж и не знаю... Да, perl version 5.005_03 built for i386-linux. serge@matveev.spb.ru Serge Matveev & ... ICQ 3575357 * Origin: После нас пришло новое поколение и выбрало Pepsi. (2:5030/182) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/22753bd9ebfa.html, оценка из 5, голосов 10
|