Please see the code bellow:
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()
开发者_StackOverflow社区
From the above code let $a is allocating x amount of memory and $b is allocating y amount of memory;
Now my question is which one is correct from bellow?
x > y
x < y
These are my numbers:
Starting allocation 62480
Allocated memory for new A() 328
Allocated memory for new B() 496
Thus x < y
These two class definitions are equivalent
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;
}
Meaning that were you to change the definition of B into that of C then the memory usage would be the exact same for using new B() or new C().
To run it yourself use this code (as an example)
$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";
You can investigate this by using the memory_get_usage function.
It should be public $x, $y, $z.
And $b takes up more memory because it has an instance of A inside.
精彩评论