将一个类的实例分配给另一个类的成员变量是否会增加内存占用量?

时间:2020-01-31 22:53:15

标签: php oop memory memory-management

一个例子:

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

上面的代码将是MyClass->data的内存的约3倍还是仅是1x,因为它是通过引用传递的?

1 个答案:

答案 0 :(得分:-1)

不会为$my_class实例分配新的内存。

MyOtherClass::$var不包含$my_class的独立存储器表示,而只是对象标识符引用。

因此每个new MyOtherClass($my_class);只会添加字节以将特定实例存储在内存中,而不会为$my_class的副本添加额外的内存。

您可以使用幼稚的方法like this来估计每个新实例所花费的内存量。