3

请看下面的代码:

class A {
    public x = 5;
    public y = 6;
    public z = 7;
}

class B extends A {
    public m = 1;
    public n = 2;
}

$a = new A();
$b = new B()

从上面的代码让$a分配x数量的内存,$b分配y数量的内存;

现在我的问题是下面哪一个是正确的?

x > y

x < y

4

3 回答 3

7

这些是我的数字:

Starting allocation 62480
Allocated memory for new A() 328
Allocated memory for new B() 496

因此x < y

这两个类定义是等价的

class B extends A {
    public $m = 1;
    public $n = 2;
}

class C {
    public $x = 5;
    public $y = 6;
    public $z = 7;
    public $m = 1;
    public $n = 2;
}

这意味着如果您将 B 的定义更改为 C 的定义,那么使用 new B() 或 new C() 的内存使用量将完全相同。

要自己运行它,请使用此代码(作为示例)

$start = memory_get_usage();
echo "Starting allocation $start\n";
$a = new A();
$diff = memory_get_usage() - $start;
echo "Allocated memory for new A() $diff\n";
$b = new B();
$diff = memory_get_usage() - $start - $diff;
echo "Allocated memory for new B() $diff\n";
于 2009-12-14T08:29:15.070 回答
3

您可以使用memory_get_usage函数对此进行调查。

于 2009-12-14T08:27:54.090 回答
1

它应该是公开的 $x、$y、$z。

并且 $b 占用更多的内存,因为它里面有一个 A 的实例。

于 2009-12-14T08:27:26.043 回答