Почему free () оставляет вещи в памяти? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь понять, как malloc-realloc и free глубоко работают в C. Я нашел эту страницу и смог понять, как распределяется порция, но я не совсем уверен, как работает функция free, потому что в моей тестовой программе после освобождения некоторые данные остаются в памяти называется.

Так выглядит память раньше ...

33 0 0 0 0 0 0 0 *q=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

... и после свободной функции:

33 0 0 0 0 0 0 0 *q=112 132 178 223 255 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Я понял, что 33 - это размер куска, хранящегося в заголовке куска, но я не могу понять, что означают числа после "q", когда память освобождается.

Q - адрес, возвращаемый malloc.

Спасибо!

1 Ответ

2 голосов
/ 10 мая 2019

Используемое программное обеспечение для управления памятью использует память, освобожденную free, для своих собственных целей.Для организации блоков памяти, доступных для выделения, необходимы данные, и использование памяти, освобожденной free, является удобным способом сделать это.

Как используется память и используется ли она,зависит от реализации.Одна реализация может использовать освобожденную память одним способом, тогда как другая реализация использует ее другим способом, а третья реализация может вообще не использовать освобожденную память, по крайней мере, для блоков определенного размера.Например, блоки определенного фиксированного размера могут отслеживаться с помощью растрового изображения, хранящегося в другом месте, возможно, с использованием разных растровых изображений для разных фиксированных размеров.

...