Edited by Ripper, 25 April 2010 - 16:29 PM.
Как free() определяет кол-во освобождаемых байт памяти
Started By
Ripper
, Apr 25 2010 16:27 PM
3 replies to this topic
#1 Posted 25 April 2010 - 16:27 PM
malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок
free() принимает только указатель, как она определяет сколько надо освобождать?
Может где-то запоминается объём, выделенный по данному адресу через malloc?
#2 Posted 25 April 2010 - 17:34 PM
Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.malloc() принимает кол-во выделяемых байт памяти и возвращает указатель на выделенный участок
free() принимает только указатель, как она определяет сколько надо освобождать?
Может где-то запоминается объём, выделенный по данному адресу через malloc?
С нами сила Алхазашвили!
#3 Posted 25 April 2010 - 21:21 PM
Также добавлю, что конкретная реализация уже зависит от ОС и системных библиотек. Т.е. запоминать они могут различными способами.Да, конечно. Существует таблица занятых и свободных страниц/сегментов памяти. С ними эти функции и работают.
И еще malloc не обязательно выделяет память. Например в linux с настройками по-умолчанию вызов malloc не выделяет память под данные, а только дает адрес. Память будет выделена при первом обращении по этому адресу. Сделано так из-за того, что многие программы аллоцируют памяти значительно больше, чем им на самом деле нужно.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
#4 Posted 26 April 2010 - 2:21 AM
Всем спасибо
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users