Перейти к содержимому


Фото

Как free() определяет кол-во освобождаемых байт памяти


  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 Ripper Опубликовано 25 Апрель 2010 - 16:27

Ripper
  • Свои
  • 497 Сообщений:
  • Павел Рустанович
malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок free() принимает только указатель, как она определяет сколько надо освобождать? Может где-то запоминается объём, выделенный по данному адресу через malloc?

Изменено: Ripper, 25 Апрель 2010 - 16:29

post-2756-0-28658900-1472313042.png


#2 Syrano Опубликовано 25 Апрель 2010 - 17:34

Syrano
  • Свои
  • 9 630 Сообщений:
  • Владимир Зайцев

malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок
free() принимает только указатель, как она определяет сколько надо освобождать?
Может где-то запоминается объём, выделенный по данному адресу через malloc?

Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.

С нами сила Алхазашвили!


#3 KiberGus Опубликовано 25 Апрель 2010 - 21:21

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов

Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.

Также добавлю, что конкретная реализация уже зависит от ОС и системных библиотек. Т.е. запоминать они могут различными способами.
И еще malloc не обязательно выделяет память. Например в linux с настройками по-умолчанию вызов malloc не выделяет память под данные, а только дает адрес. Память будет выделена при первом обращении по этому адресу. Сделано так из-за того, что многие программы аллоцируют памяти значительно больше, чем им на самом деле нужно.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#4 Ripper Опубликовано 26 Апрель 2010 - 2:21

Ripper
  • Свои
  • 497 Сообщений:
  • Павел Рустанович
Всем спасибо :)

post-2756-0-28658900-1472313042.png





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 невидимых