tags:

views:

620

answers:

1

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

When programming in C, I often usemalloc() to allocate memory and free() to release it:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
/** Do stuff **/
free(objArr);

How does free() know how much memory to deallocate? Does malloc() create a table somewhere to remember pointers and how much memory each pointer pointed to?

If that is the case, will free() fail if I rename the pointer? e.g.:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
MyObject* newPtr= objArr;
free(newPtr); /** Does this fail? **/

What will happen if I increment the pointer and then run free()? e.g.:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects);
newPtr++;
free(newPtr); /** What happens now? **/

Will it deallocate an additional chunk of memory just off the end of the original array?

+5  A: 

The most common way is that it stores some information immediately before the address it returns to you. So if the address is returns is 0x1004, internally, malloc will have put aside the memory started at 0x0FFC and will store various information such as the size somewhere in the memory between 0xFFC - 0x1003 but the application will be told the allocation starts at 0x1004.

The only thing that matters to free is getting the exact same address as what malloc returned.

R Samuel Klatchko