Изменено: Ripper, 25 Апрель 2010 - 16:29
Как free() определяет кол-во освобождаемых байт памяти
Started By
Ripper
, апр 25 2010 16:27
3 ответов в теме
#1 Опубликовано 25 Апрель 2010 - 16:27
malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок
free() принимает только указатель, как она определяет сколько надо освобождать?
Может где-то запоминается объём, выделенный по данному адресу через malloc?
#2 Опубликовано 25 Апрель 2010 - 17:34
Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок
free() принимает только указатель, как она определяет сколько надо освобождать?
Может где-то запоминается объём, выделенный по данному адресу через malloc?
С нами сила Алхазашвили!
#3 Опубликовано 25 Апрель 2010 - 21:21
Также добавлю, что конкретная реализация уже зависит от ОС и системных библиотек. Т.е. запоминать они могут различными способами.Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.
И еще malloc не обязательно выделяет память. Например в linux с настройками по-умолчанию вызов malloc не выделяет память под данные, а только дает адрес. Память будет выделена при первом обращении по этому адресу. Сделано так из-за того, что многие программы аллоцируют памяти значительно больше, чем им на самом деле нужно.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
#4 Опубликовано 26 Апрель 2010 - 2:21
Всем спасибо
0 пользователей читают эту тему
0 пользователей, 0 гостей, 0 невидимых