Как 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? **/
Освободит ли он дополнительный кусок памяти рядом с концом исходного массива?