Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа с массивами
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Работа с массивами

Страниц (1): [1]
 

1. Kirilik - 27 Августа, 2011 - 16:48:41 - перейти к сообщению
Есть массив $А, заполненный своими значениями, и массив $В, также заполненный своими значениями.

Выполнить $А = $В; - что произойдет с памятью массива A?. Она перезапишется данными массива В, или А будет выделен новый кусок памяти с новыми данными а старая область памяти будет освобождена?

Выполнить сначала $A = array(); а затем $A = $B; - что произойдет в этом случае?
2. SAD - 27 Августа, 2011 - 17:02:00 - перейти к сообщению
перезапишется
3. Kirilik - 27 Августа, 2011 - 17:10:32 - перейти к сообщению
Значит и в том и в другом случае память, отведенная ранее массиву А, будет возвращена программе?
Т.е. никаких утечек памяти в подобной ситуации PHP не допустит?
4. SAD - 27 Августа, 2011 - 17:12:06 - перейти к сообщению
Я погорячился. Я не знаю...
5. Kirilik - 27 Августа, 2011 - 17:19:39 - перейти к сообщению
SAD пишет:
Я погорячился. Я не знаю...

На первый раз простяю!
6. EuGen - 29 Августа, 2011 - 09:39:57 - перейти к сообщению
Зависит от версии PHP а вернее от того, используется ли garbage collector (сборщик мусора).
Возможность эта добавлена с PHP >=5.3
Если не использовать GC то память не будет высвобождаться и мы получим одинаковый результат:
PHP:
скопировать код в буфер обмена
  1. $a=array('foo'=>'bar', 'baz'=>'test', 'ton'=>'tty');
  2. $b=array('gli'=>'qos', 'ssh'=>'dat');
  3. $a=$b;

Даст:
CODE (htmlphp):
скопировать код в буфер обмена
  1. string(13) "346080/524288"
  2. string(13) "347616/524288"
  3. string(13) "346796/524288"
  4.  


Однако же если включить сборщик мусора, мы увидим другую картину:
PHP:
скопировать код в буфер обмена
  1. gc_enable();
  2. $a=array('foo'=>'bar', 'baz'=>'test', 'ton'=>'tty');
  3. $b=array('gli'=>'qos', 'ssh'=>'dat');
  4. $a=$b;

Даст:
CODE (htmlphp):
скопировать код в буфер обмена
  1. string(13) "346400/524288"
  2. string(13) "347944/524288"
  3. string(13) "347124/524288"
  4.  

 

Powered by ExBB FM 1.0 RC1