Увеличивает ли выделение экземпляра класса переменной-члена другого класса объем памяти? - PullRequest
0 голосов
/ 01 февраля 2020

Пример:

class MyClass {

  private $data = array( /* large amount of data */  );

}

class MyOtherClass {
  private $var;

  public function __construct($other_class_instance) {
    $this->var = $other_class_instance;
  }
}

$my_class = new MyClass();

$other_class_1 = new MyOtherClass($my_class);
$other_class_2 = new MyOtherClass($my_class);

Вышеупомянутый код будет ~ в 3 раза больше памяти, чем MyClass->data, или только в 1 раз, потому что он передается по ссылке?

1 Ответ

0 голосов
/ 01 февраля 2020

Новое выделение памяти для экземпляра $my_class не будет выполнено.

MyOtherClass::$var не содержит независимое представление памяти $my_class, а просто ссылку на идентификатор объекта.

Таким образом, каждый new MyOtherClass($my_class); будет добавлять только байты для хранения указанного экземпляра c в памяти, но без дополнительной памяти для копии $my_class.

. Вы можете использовать наивный Подходите к вот так , чтобы приблизительно измерить, сколько памяти вы тратите на каждый новый экземпляр.

...