История изменений
Исправление
gh0stwizard,
(текущая версия)
:
Тут двойное потребление ОЗУ из-за незнания особенностей Perl. Можно переписать иначе и тогда потребление снизится до минимума:
while (<STDIN>) { print grep /$ARGV[0]/ }
@strings=<STDIN>
загонит входной файл в ОЗУ, а это для данной задачи не нужно.А вообще, проблема кроется в том, как Perl выделяет память под данные. В частности, для строк и элементов массива в строковом представлении обычно выделяется намного больше памяти, чем они действительно занимают. Кроме того, при операциях со строками, Perl их не модифицирует, если происходят операции «вырезания» куска из строки, а использует счетчики. В итоге, если загнать файл как указано в оригинальном примере скажем в 123 678 байт, то Perl выделит скорее больше памяти, чем ожидается (может 192 кб, может 256 кб, зависит от длин строк).
Исходная версия
gh0stwizard,
:
Тут двойное потребление ОЗУ из-за незнания особенностей Perl. Можно переписать иначе и тогда потребление снизится до минимума:
while (<STDIN>) { print grep /$ARGV[0]/ }
@strings=<STDIN>
загонит входной файл в ОЗУ, а это для данной задачи не нужно.