Сохранение значений по ссылке

Yaroslav PHPDev

Новичок
PHP:
        $myStr = '';
        for ($i = 0; $i<999500; $i++) {
            $myStr .= chr(rand(0,127));
        }
        echo round(memory_get_usage()/1024/1024,2) . ' Mb';
выводит 1.35 Mb

PHP:
        $myStr = '';
        for ($i = 0; $i<999500; $i++) {
            $myStr .= chr(rand(0,127));
        }
        $myStr2 = &$myStr;
        echo round(memory_get_usage()/1024/1024,2) . ' Mb';
после этого я сохраняю значение по ссылке выводит 1.35 Mb

PHP:
        $myStr = '';
        for ($i = 0; $i<999500; $i++) {
            $myStr .= chr(rand(0,127));
        }
        $myStr2 = $myStr;
        echo round(memory_get_usage()/1024/1024,2) . ' Mb';
И наконец сохраняю значение, также выводит 1.35 Mb. Мне казалось что должно дублировать информацию в памяти, и соотвественно количество памяти должно увеличиваться. Что происходит?! Кто нибудь может объяснить?
ОС: Windows XP
PHP: 5.2
Apache 2.1
 

Вурдалак

Продвинутый новичок
PHP:
<?php

function getMemory($m)
{
    return sprintf('%.02f MB', $m / 1048576);
}

$m = memory_get_usage();

$myStr = str_repeat("\0", 1048576);
echo getMemory(memory_get_usage() - $m), "\n"; // 1.00 MB 

$myStr2 = $myStr;
echo getMemory(memory_get_usage() - $m), "\n"; // 1.00 MB 

$myStr2[0] = '?';
echo getMemory(memory_get_usage() - $m), "\n"; // 2.00 MB
Google «copy on write php».
 
Сверху