В новых версиях 5+ при unset

pilot911

Новичок
В новых версиях 5+ при unset

В новых версиях 5+ при unset память освобождается ?
 

findnext

Новичок
x-yuri
а ты скрипт напиши и посмотри

PHP:
echo  memory_get_usage() . "\n"; 

$a = str_repeat("BLABLA", 13434);

echo  memory_get_usage() . "\n"; 

unset($a);

echo memory_get_usage() . "\n";
 

x-yuri

Новичок
на php 5 я естественно пробовал
PHP:
49104
129976
49360
просто мне непонятно в чем проблема, если со времен php 3.0.17 unset освобождает память
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
системе память не возвращается, она остается зарезервированной для повторного использования другими данными скрипта

-~{}~ 05.01.09 18:40:

findnext, x-yuri
кончайте постить ответы наперегонки, коли не разобрались - люди могут поверить
 

x-yuri

Новичок
кстати да, под windows на php 5 с использованием утилиты tasklist (вместо memory_get_usage) результат такой:
-~{}~ 05.01.09 18:46:

но я думаю, что автора интересовало скорее превышение memory_limit. а он вряд ли проверяется по размеру процесса
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
x-yuri
а вдруг он считает, сколько одновременных процессов поместится в его оперативке? ;)

-~{}~ 05.01.09 18:51:

причем, память "освобождается" в самом скрипте только в случае отсутствия других указателей (и переменных) на данные, адресуемые удаляемой переменной.
PHP:
$a='string';
$b=$a; //копирования данных нет
unset ($a); //освобождения памяти нет
 

x-yuri

Новичок
Код:
$a='string'; 
$b=$a; //копирования данных нет 
$b .= 'a'; // копирование данных есть
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
cDLEON, я даже немного завидую - тебя ждет еще много удивительных открытий :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Чё за бред ? Где нет копирования?
http://www.thedeveloperday.com/php-lazy-copy/
в ZCE есть этот вопрос, кстати. Довольно подленький, надо признать.

-~{}~ 05.01.09 23:12:

$b=&$a; // копирования данных нет
Кстати, при передаче по ссылке это работает несколько по другому.
https://www.zend.com/en/forums/index.php?t=msg&goto=9256&S=0cf04a5ef8d12c13130e58a21f176dc9
 

cDLEON

Онанист РНРСlub
Ну вообще - я так и думал 8)
Что копия создаётся только после изменения =)
Только немножко буквально воспринял тот коммент...
 

findnext

Новичок
для тестирования я использовал eclipse с PDT плагином - ставил breakpoints. Пошагово смотрел значение каждой из 3 функций memory_get_usage. Память высвобождалась в полном объёме.
PHP:
$res1 =  memory_get_usage() . "\n";  //251976

$a = str_repeat("BLABLA", 13434); 

$res2 =  memory_get_usage() . "\n";  //332592

unset($a); 

$res3 = memory_get_usage() . "\n"; //251976

echo $res1;
echo $res2;
echo $res3;
-~{}~ 05.01.09 21:00:

x-yuri
что тебе этот код выведет?

-~{}~ 05.01.09 21:02:

да, действительно, здесть есть разница между присвоением переменных, и последующим выводом и между выводом значения функции сразу
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
findnext, x-yuri,
о чем это вы, собственно?
может, вы в личке продолжите?
 

findnext

Новичок
я останусь при своём мнении :)

-~{}~ 05.01.09 21:20:

grigori
вот объясните мне тупому, почему
PHP:
$res1 =  memory_get_usage() . "\n";  //251976 

$a = str_repeat("BLABLA", 13434);  

$res2 =  memory_get_usage() . "\n";  //332592 

unset($a);  

$res3 = memory_get_usage() . "\n"; //251976 

echo $res1; 
echo $res2; 
echo $res3;
конкретно отличается от

PHP:
echo  memory_get_usage() . "\n";  

$a = str_repeat("BLABLA", 13434); 

echo  memory_get_usage() . "\n";  

unset($a); 

echo memory_get_usage() . "\n";
 
Сверху