Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Использование памяти в s///   Paul Kulchenko   07 Jun 2000 01:19:03 
 Re: Использование памяти в s///   RockMover   07 Jun 2000 03:58:11 
Архивное /ru.perl/6552f8fb8edc.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional