How does delete work? [duplicate]

Possible Duplicate:
C programming : How does free know how much to free?

How does delete know how many bytes it has to free? I read that there is some block before the actual pointer address that is returned by new which contains block address details.

Anyone here who knows how many bytes this block has or how the format of that block is?


In general, this is implementation-dependent.

The way this is usually implemented is that new/malloc will allocate slightly more bytes than you asked for, and will use the extra bytes for some book-keeping: many times the allocated blocks will also be maintained in a linked-list, and so the extra bytes will be used to store the next/prev pointer, as well as the size of the block.

This is not mandatory, however. The new/malloc calls can just as well store your pointer and the block's size in, say, a map.

If you're interested in a specific implementation, you will have to provide more information (e.g. what runtime/compiler are you using?).


new operator and malloc function handle memory in their own particular ways, so

  • if you allocated memory with 'new' uses 'delete'
  • if you allocated memory with 'malloc' uses 'free'
  • if you don't know how/who/where the memory have been allocated, don't free it

If you are bound to try to mess up with the inner workings of malloc or new (which seems to be your goal), you're doing it wrong ^^


There's no single right answer to that question because it depends on the situation. In some cases the compiler knows the size of the object at compile time and thus delete knows how many bytes to free. In situations where the memory size not known at compile time there either a memory map involved or as you yourself suggested, a word preceding the pointer, that tells number of allocated bytes.

I believe a lot of this is implementation specific not something you can rely on to go about a specific way. This question is very similar to this one.