Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ overloaded new[] query : What size does it take as parameter?

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 ?

like image 793
Manish Baphna Avatar asked Oct 25 '10 07:10

Manish Baphna


1 Answers

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.

like image 109
Konrad Rudolph Avatar answered Oct 29 '22 03:10

Konrad Rudolph