开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜