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 ?
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
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With