Jump to content

  • Log in with Facebook      Sign In   
  • Create Account

Photo

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


  • Please log in to reply
3 replies to this topic

#1 Ripper Posted 25 April 2010 - 16:27 PM

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

Edited by Ripper, 25 April 2010 - 16:29 PM.

post-2756-0-28658900-1472313042.png


#2 Syrano Posted 25 April 2010 - 17:34 PM

Syrano
  • Свои
  • 9630 posts
  • Владимир Зайцев

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

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

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


#3 KiberGus Posted 25 April 2010 - 21:21 PM

KiberGus
  • Genius loci
  • 6561 posts
  • Алексей Гусейнов

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

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

#4 Ripper Posted 26 April 2010 - 2:21 AM

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

post-2756-0-28658900-1472313042.png





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users