Como o free () sabe quanta memória é desalocada? [duplicado]

Duplicata Possível:
C programming: Como o free sabe quanto liberar?

Quando estou programando em C, costumo usarmalloc() para alocar memória efree() para liberá-lo:

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

Como é quefree() sabe quanta memória para desalocar? Fazmalloc() criar uma tabela em algum lugar para lembrar ponteiros e a quantidade de memória apontada por cada ponteiro?

Se for esse o caso,free() falhar se eu renomear o ponteiro? por exemplo.:

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

O que acontecerá se eu incrementar o ponteiro e depois executarfree()? por exemplo.:

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

Será que ele irá desalocar um pedaço adicional de memória logo após o final da matriz original?

questionAnswers(1)

yourAnswerToTheQuestion