Как free () знает, сколько памяти нужно освободить? [Дубликат]

Возможный дубликат:
Программирование на C: как free знает, сколько стоит free?

При программировании на С я часто используюmalloc() выделить память иfree() выпустить это:

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

Какfree() знаете сколько памяти освободить? Есть лиmalloc() создать таблицу где-нибудь, чтобы запомнить указатели и сколько памяти указывал каждый указатель?

Если это так, будетfree() не удастся ли переименовать указатель? например.:

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

Что произойдет, если я увеличу указатель, а затем выполнюfree()? например.:

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

Освободит ли он дополнительный кусок памяти рядом с концом исходного массива?

Ответы на вопрос(1)

Ваш ответ на вопрос