2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C, вопрос про malloc
Сообщение06.01.2014, 16:40 


07/05/12
14
Предмет "Программирование в Unix", преподаватель задал вопрос, что будет, если мы сделаем:

Код:
char *a = malloc(20);
char *b = malloc(10);
free(b);
free(a);


Я читал в Робачевском, что в malloc и free используется sbrk(), то есть, у нас сдвигается брейк-адрес вверх или вниз, давая процессу память или отнимая ее. То есть, у нас дважды увеличивается количество памяти (на 20, потом на 10), потом дважды уменьшается (на 10, потом на 20).
Но что будет, если мы освободим память в другом порядке? У нас ведь не должно зависеть освобождение от порядка операций, то есть, все должно быть хорошо. Но если мы сделаем наоборот, то у нас сначала адрес опустится на 20, отгрызая лишний кусок, а потом только на 10, и все будет плохо.
То есть, на самом деле там используется другой механизм? Если да, то подскажите, пожалуйста, какой. Если нет, то помогите понять, в чем я неправ.

 Профиль  
                  
 
 Re: C, вопрос про malloc
Сообщение06.01.2014, 16:59 
Заслуженный участник


04/05/09
4587
Хранится максимальный доступный адрес (brk) и список свободных блоков памяти в пределах этого адреса. Списков может быть несколько, например для разных размеров блоков, для пущей эффективности.
Когда в конце кучи накопится некоторое количество непрерывной свободной памяти, библиотека вызовет sbrk и отдаст эту память системе, но 20 байт обычно для этого недостаточно. Это всё настраиваемо (см mallopt), и sbrk вообще может не вызываться для освобождения памяти, только для выделения.

 Профиль  
                  
 
 Re: C, вопрос про malloc
Сообщение06.01.2014, 17:04 


07/05/12
14
А где хранится этот список?
То есть, при free просто может новый блок быть занесен в этот список? Где-нибудь вообще можно почитать про этот механизм?

 Профиль  
                  
 
 Re: C, вопрос про malloc
Сообщение06.01.2014, 17:32 
Заслуженный участник


04/05/09
4587
Зачем? Детали реализации могут быть очень разные.
Но о некоторых свойствах знать, пожалуй, надо. Например, о том, что на информацию о блоке памяти (размер, занятость) требуется дополнительная память, так что если вы выделили 10 байт, то на самом деле свободной памяти станет меньше, например, на 24 байта.

 Профиль  
                  
 
 Re: C, вопрос про malloc
Сообщение06.01.2014, 17:33 


07/05/12
14
Ну чтобы хоть знать, какие возможности там бывают.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group