tags:

views:

75

answers:

3

I understand that certain data type object have certain buffer size. E.g. a char is 1byte. So, when creating a self-defined class object,

  1. How much memory is allocated to the object a?
  2. Is the amount of memory allocated different if the object is created on stack, or heap?
  3. Is the amount of memory allocated fixed, or can be changed?

Creating a user-defined class instance:

Animal a; //stack memory
a.makeSound();

Animal *a = new Animal(); //heap memory
a->makeSound();
+3  A: 

In both cases at least sizeof(Animal) bytes will be allocated.

In case of stack allocation some extra memory might be used for alignment. In case of heap memory some extra memory will likely be used for storing heap service data. You can influence the exact amount of memory by changing the class - for example for heap allocation you can define a custom operator new for that class and make it allocate whatever you want amount of memory.

sharptooth
A: 
  1. The amount of memory needed to represent Animal depends on Animal's data members.
  2. The heap allocations use more memory than stack allocations since heap cells store meta informaion related to the heap related to each cell.
  3. In a strick sense the object size is fixes. However Animal may contain and own references to other heap objects. These heap objects can be changed at runtime.
doron
A: 

How much memory is allocated to the object a?

Depends on Animal class definition.

Is the amount of memory allocated different if the object is created on stack, or heap?

No.

Is the amount of memory allocated fixed, or can be changed?

Depending upon 32-bit or 64-bit system and compiler specific implementations like padding etc, amount of memory allocated may vary.

bjskishore123