2013-07-26 О, я по ходу баг в PHP нашёл - утечку памяти?

Материал из YourcmcWiki
Перейти к: навигация, поиск

См. https://bugs.php.net/bug.php?id=65340

При использовании __set() объект почему-то занимает в 2 раза больше памяти O_o

Тестовый скрипт:

<?php
 
// Memory leak somewhere around __set?
 
class A
{
    var $data = array();
    function __get($k)
    {
        return $this->data[$k];
    }
    function __set($k, $v)
    {
        return $this->data[$k] = $v;
    }
}
 
$b = new A();
 
for ($i = 0; $i < 500000; $i++)
    $b->{"a$i"} = 'abc';
var_dump(memory_get_usage()); // int(78318488) - why so big?
$c = clone $b;
unset($b);
var_dump(memory_get_usage()); // int(42220972) - OK
 
unset($c);
$b = new A();
for ($i = 0; $i < 500000; $i++)
    $b->__set("a$i", 'abc');
var_dump(memory_get_usage()); // int(42221492) - OK

Почему-то первое значение потребления памяти почти в 2 раза больше, чем два других.

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.