C++ overloaded new[] query : What size does it take as parameter?
I have overloadded 开发者_C百科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
.
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.
精彩评论