Dlaczego ten prosty skrypt php przecieka z pamięci?

W nadziei, że uda nam się uniknąć wycieków pamięci w programach php (moduły drupal itp.), Zacząłem bawić się prostymi skryptami php, które przeciekają pamięć.

Czy ekspert ds. Php może mi pomóc dowiedzieć się, co z tym skryptem powoduje, że wykorzystanie pamięci stale rośnie?

Spróbuj uruchomić go samodzielnie, zmieniając różne parametry. Wyniki są interesujące. Oto jest:

<?php

function memstat() {
  print "current memory usage: ". memory_get_usage() . "\n";
}

function waste_lots_of_memory($iters) {
  $i = 0;
  $object = new StdClass;
  for (;$i < $iters; $i++) {
    $object->{"member_" . $i} = array("blah blah blha" => 12345);
    $object->{"membersonly_" . $i} = new StdClass;
    $object->{"onlymember"} = array("blah blah blha" => 12345);
  }
  unset($object);
}

function waste_a_little_less_memory($iters) {
  $i = 0;
  $object = new StdClass;
  for (;$i < $iters; $i++) {

    $object->{"member_" . $i} = array("blah blah blha" => 12345);
    $object->{"membersonly_" . $i} = new StdClass;
    $object->{"onlymember"} = array("blah blah blha" => 12345);

    unset($object->{"membersonly_". $i});
    unset($object->{"member_" . $i});
    unset($object->{"onlymember"});

  }
  unset($object);
}

memstat();

waste_a_little_less_memory(1000000);

memstat();

waste_lots_of_memory(10000);

memstat();

Dla mnie dane wyjściowe to:

current memory usage: 73308
current memory usage: 74996
current memory usage: 506676

[edytowane, aby usunąć więcej członków obiektu]

questionAnswers(6)

yourAnswerToTheQuestion