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?