Переполнение памяти PHP? - PullRequest
       9

Переполнение памяти PHP?

1 голос
/ 19 декабря 2009

Я сейчас собираю php framework ... снова.

У меня есть класс с именем config.

это довольно просто, это называется так:

$conf = config::get('general');

$ conf теперь массив с настройками конфигурации.

скелет класса выглядит так:

final class config {

private static $configs = array();

public static function get($name) {

return self::$configs[$name];

}

}

предположим, что массив $ configs уже заполнен и имеет "общий" ключ.

Этот "общий" ключ содержит массив размером ровно 1 мегабайт.

Допустим, я звоню

config::get('general');

10 раз на разные переменные. Ни одна из переменных не редактировалась впоследствии ... это значит, что у меня есть 10 переменных, каждая из которых содержит 1 мегабайт, или 10 переменных, указывающих на 1 мегабайт?

Ответы [ 2 ]

4 голосов
/ 19 декабря 2009

Только один, если вы не измените их.

Но php - это не тот язык, на котором вы можете положиться на какое-то конкретное поведение; -)

Только что попробовал:

<?php

printf("%10d\n",memory_get_usage());
$a = array_fill(0,30000,'oh');
printf("%10d\n",memory_get_usage());
$b = $a;
printf("%10d\n",memory_get_usage());
$b[] = '';
printf("%10d\n",memory_get_usage());

выход:

    325524
   2256916
   2256980
   4188316
0 голосов
/ 19 декабря 2009

Насколько я понимаю, вы написали бы по 10 массивов на 1 МБ.

Если вы используете & или передаете переменную по ссылке и возвращаете указатель, или используете & перед именем функции, чтобы вернуть возвращаемое значение по ссылке, вы можете делать то, что хотите.

...