Как работает "освободить / удалить"?

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

Для каждого динамического выделения памяти, используя 'malloc / new', у нас есть методы 'free / delete', чтобы освободить выделенную память.

Мой вопрос: если размер выделения памяти определяется во время выполнения и места памяти не являются смежными, как эти методы освобождения памяти знают, сколько памяти нужно освободить и какие места памяти следует очистить?

Что заставляет эти функции работать, если мы передаем им только указатель на одно местоположение?

2 ответа

Когда malloc/new выделяет память, он также записывает, где и сколько памяти он выделил для указателя на данную ячейку памяти. free/delete ищет, какую память освободить, когда вы даете ей указатель.

Вот почему вы никогда не должны пытаться освободить указатель, который вы переместили с "+=" или что-то подобное.

Они отслеживают, сколько памяти вы выделили для внутреннего использования.

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