Pourquoi ce simple script php fuite de mémoire?

Dans l'espoir d'essayer d'éviter à l'avenir les fuites de mémoire dans les programmes de php (drupal modules, etc.) J'ai été déconner avec de simples scripts php de fuite de mémoire.

Pourrait php expert de m'aider à trouver ce que sur ce script provoque l'utilisation de la mémoire pour sans cesse monter?

Essayer de l'exécuter vous-même, de changer divers paramètres. Les résultats sont intéressants. Ici, il est:

<?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();

Pour moi, la sortie est:

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

[édité pour débloquer plus de membres de l'objet]

Je voudrais essayer de supprimer les lignes dans la boucle for à une heure, afin d'isoler le problème.

OriginalL'auteur mjgoins | 2009-07-17