Вопрос 1:
Вот простенький скрипт:
#!/usr/bin/perl -w
foreach $i (0..1000000){
push(@t,$i);
}
print "$#t\n";
sleep 3;
$#t=-1;
print "$#t\n";
sleep 3;
Во время его работы смотрим в top и видим что после выполнения $#t=-1; память не очистилась. Почему?
Вопрос 2:
Вот еще один пример:
#!/usr/bin/perl -w
open(FIL,"test.bin");
while(<FIL>){
s{(.)(?{push(@t,$1)})}{}g;
}
close FIL;
print "$#t\n";
sleep 3;
$#t=-1;
print "$#t\n";
sleep 3;
Пусть test.bin - бинарный файл имеет размер 1 000 000 байт, для совпадения с размером массива из предыдущего примера. Во время его выполнения опять же смотрим в top и видим что занимаемая память больше, чем в примере 1. Почему?
Вопрос 3:
Если в примере 2 заменить
s{(.)(?{push(@t,$1)})}{}g;
на
s{(.)(?{push(@t,ord($1))})}{}g;
то памяти откушается еще больше. Почему?
Тем кто не знает что такое ord(), а искать влом:
Definition ord():
This function returns the numeric ASCII code of the first character in the expression (or $_ if none specified).
Example
print("ord() ",ord("A"), "\n");
Всем принявшим участие в обсуждении заранее благодарен.
Ответ на:
комментарий
от idle
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от idle
Ответ на:
комментарий
от idle
Ответ на:
комментарий
от ach
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Мониторинг очередей шейпера Linux (2011)
- Форум Почему не работает скрипт? (2013)
- Форум [опрос][задротство]Память, память ... память ... (2011)
- Форум Память (2016)
- Форум память (2014)