|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Paul Kulchenko 2:5020/400 07 Jun 2000 01:19:03 To : All Subject : Re: Использование памяти в s/// -------------------------------------------------------------------------------- HI, Alex! Alex Kharitonov wrote in message <960162158@p17.f7.n5038.z2.fidonet.ftn>... >Чем в отношении расхода памяти отличаются следующие два выражения? >$s =~ s/(..)/$c = 1; '?'/egs; >$s =~ s/(..)/'?'/egs; >При выполнении первого почему-то отнимается непропорционально много памяти >(например если длина $s равна 400000 символов, то памяти требуется ~10M). Во А чего еще можно было ожидать? Выражение будет матчится чуть менее 400000 раз, при этом расходы на твою переменную $c составят минимум 20 байт. Hесложным умножением и прибавлением небольших накладных расходов получим сумму близкую к заданной. >втором случае все нормально. Также первый вариант выполняется в несколько раз >медленнее второго. Переменная $c объявлена выше. Windows 95, ActivePerl build А то, что она объявлена выше в данном случае не спасает. Перлу нужно хранить КАЖДУЮ копию, поскольку при наличии /e они могут быть различными, соответственно изменится результат регэкспа. Даже не принимая во внимание дополнительные операции, только из-за работы с памятью уже будет медленнее. За безтиповость чем-то нужно платить. Есть подозрение, что конструкция $c . '?' будет отъедать меньше памяти, поскольку является константой. Hо это только подозрение. Best wishes, Paul. --- ifmail v.2.15dev5 * Origin: Rostelecom/Internet Centre (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6552f8fb8edc.html, оценка из 5, голосов 10
|