views:

62

answers:

2

I have overloadded operator new[] like this

void * human::operator new[] (unsigned long int count){
      cout << " calling new for array with size  = " << count <<  endl  ;
      void * temp = malloc(count) ;  
      return temp ; 
}

and now calling

human * h = new human[14] ;

say sizeof(human) = 16 , but count it prints is 232 which is 14*16 + sizeof( int * ) = 224+8 .

Why is this extra space being allocated ? And where does it fall in memory ? Because when I print *h OR h[0] I get same results , so its not in beginning of memory chunk. Is it correct at all OR I am missing some thing here ?

+5  A: 

The extra space allocated is used to store the size of the array for internal usage (in practice so that delete[] knows how much to delete).

It is stored at the beginning of the memory range, immediately before &h. To see this, just look at the value of temp inside your operator new[]. The value will differ from that in &h.

Konrad Rudolph
+2  A: 

It is to store the number of objects allocated so that when you invoke delete[] proper number of objects are deleted. See this FAQ for more details.

Naveen