12 votes

Référence aux variables PHP et utilisation de la mémoire

Selon manuel php :

<?php
$a =& $b;
?>
// Note:
// $a and $b are completely equal here. $a is not pointing to $b or vice versa.
// $a and $b are pointing to the same place. 

Je le suppose :

<?php
$x = "something";
$y = $x;
$z = $x;

devrait consommer plus de mémoire que :

<?php
$x = "something";
$y =& $x;
$z =& $x;

car, si j'ai bien compris, dans le premier cas, nous "dupliquons" la valeur. something et l'affecter à $y y $z ayant à la fin 3 variables et 3 contenus, tandis que dans le deuxième cas nous avons 3 variables pointing le même contenu.

Donc, avec un code comme :

$value = "put something here, like a long lorem ipsum";
for($i = 0; $i < 100000; $i++)
{
    ${"a$i"} =& $value;
}
echo memory_get_usage(true);

Je m'attends à avoir une utilisation de la mémoire inférieure à :

$value = "put something here, like a long lorem ipsum";
for($i = 0; $i < 100000; $i++)
{
    ${"a$i"} = $value;
}
echo memory_get_usage(true);

Mais l'utilisation de la mémoire est la même dans les deux cas.

Qu'est-ce que je rate ?

14voto

hakre Points 102271

Le PHP ne se duplique pas sur l'affectation, mais sur l'écriture. Voir Copy-on-Write in the PHP Language (18 janvier 2009 ; par Akihiko Tozawa, Michiaki Tatsubori, Tamiya Onodera et Yasuhiko Minamide ; fichier PDF) pour une discussion scientifique à ce sujet, Ne pas utiliser les références PHP (10 janv. 2010 ; par Jan Schlüter) pour s'amuser un peu et mon propre point de vue est Références au Max avec plus de références.

4voto

Benjie Points 3416

PHP utilise copie sur écriture afin qu'il n'utilise pas plus de mémoire pour les chaînes dupliquées jusqu'à ce que vous les modifiiez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X