Как 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 ответ

Решение

Наиболее распространенным способом является то, что он хранит некоторую информацию непосредственно перед возвращением вам адреса. Таким образом, если malloc возвращает адрес 0x1004, внутренне malloc отложит память, начатую с 0x0FFC, и будет хранить различную информацию, такую ​​как размер, где-то в памяти между 0xFFC - 0x1003, но приложению будет сообщено, что выделение начинается с 0x1004.

Единственное, что имеет значение для освобождения, это получение того же адреса, что и возвращенный malloc.

Другие вопросы по тегам