3

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

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

3 Answers 3

7

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";
Sign up to request clarification or add additional context in comments.

Comments

3

You can investigate this by using the memory_get_usage function.

Comments

1

It should be public $x, $y, $z.

And $b takes up more memory because it has an instance of A inside.

1 Comment

Nitpicking: It's more like "$b is an A, but with more stuff" than "has instance of A inside". :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.