2013-03-27 3 views
3

Разве они не должны использовать сценарий меньше памяти?Почему ссылки используют больше памяти?

function a(&$var); использует больше памяти, чем function a($var);

и foreach($array as $k => &$v) использует больше памяти, чем foreach($array as $k => $v)

Например $var использует 24 МБ. Если я прохожу его по ссылке он использует 27 MB

+1

Как вы измеряете используемую память? – Jocelyn

+0

memory_get_peak_usage – user1806244

+0

Какие значения вы храните в $ var? – Necrolyte2

ответ

2

(к сожалению) не будучи в состоянии объяснить волшебную под капотом внутри Zend Engine в деталях, я имею в виду documentation:

Ссылки на PHP являются средством доступа к одному и тому же содержимому переменной разными именами. Они не похожи на C-указатели; например, вы не можете выполнять арифметику указателей, используя их, они не являются фактическими адресами памяти и т. д. См. «Ссылки не для получения дополнительной информации». Вместо этого они являются псевдонимами таблиц символов. Обратите внимание, что в PHP имя переменной и содержимое переменной различаются, поэтому один и тот же контент может иметь разные имена. Ближайшая аналогия с именами и файлами Unix - имена переменных - это записи в каталоге, а переменный контент - это сам файл. Ссылки можно сравнить с жесткой привязкой в ​​файловой системе Unix.

Я думаю, что сравнение с файловой системой unix легко понять. Если у вас есть несколько имен для файла, вам потребуется дополнительная память для хранения этих имен.

Смежные вопросы