sbrk - sbrk

редактировать

brk и sbrk - это базовые системные вызовы управления памятью , используемые в Unix и Unix-подобных операционных системах. для управления объемом памяти, выделенной для сегмента данных процесса процесса. Эти функции обычно вызываются из функции библиотеки управления памятью более высокого уровня, такой как malloc. В исходной системе Unix brk и sbrk были единственными способами, с помощью которых приложения могли получить дополнительное пространство данных; в более поздних версиях это также можно было сделать с помощью вызова mmap.

Содержание
  • 1 Описание
  • 2 Сигнатуры и поведение функций
  • 3 Коды ошибок
  • 4 См. также
  • 5 Ссылки
Описание

Вызовы brk и sbrk динамически изменяют объем пространства, выделенного для сегмента данных вызывающего процесса. Изменение осуществляется путем сброса прерывания программы процесса, которое определяет максимальное пространство, которое может быть выделено. Разрыв программы - это адрес первого места за текущим концом области данных. Объем доступного пространства увеличивается с увеличением значения разрыва. Доступное пространство инициализируется нулевым значением, если разрыв не уменьшается, а затем увеличивается, поскольку он может повторно использовать те же страницы каким-либо неопределенным образом. Значение разрыва может автоматически округляться до размера, подходящего для архитектуры управления памятью.

sbrk и brk считаются устаревшими даже по стандартам 1997 года (Single UNIX Specification v2 или POSIX.1-1998). Они были удалены в POSIX.1-2001.

Сигнатуры и поведение функций
#include int brk (void * end_data_segment); void * sbrk (приращение intptr_t);

sbrk используется для настройки значения прерывания программы путем добавления возможного отрицательного размера, а brk используется для установки значения прерывания в значение указателя. Установите параметр incrementна ноль, чтобы получить текущее значение прерывания программы.

После успешного завершения подпрограмма brk возвращает значение 0, а подпрограмма sbrk возвращает предыдущее значение прерывания программы (если доступное пространство увеличивается, то это предыдущее значение также указывает к началу нового участка). Если одна из подпрограмм завершилась неудачно, возвращается значение −1, а глобальная переменная errno устанавливается для указания ошибки.

Не каждая Unix-подобная система поддерживает идею о том, что пользователь может управлять сегментом данных. Mac OS X реализация sbrk является эмуляцией и имеет максимальное выделение 4 мегабайта. При первом вызове для моделирования сегмента выделяется именно такая большая область. Когда этот предел достигнут, возвращается -1, а для ошибки устанавливается значение ENOMEM. brk всегда вызывает ошибку.

коды ошибок

установлена ​​ошибка ENOMEM, и выделенное пространство остается неизменным, если выполняется одно или несколько из следующих условий:

  • Запрошенный При изменении выделяется больше места, чем разрешено системным максимумом.
  • Запрошенное изменение устанавливает значение прерывания на значение , большее или равное начальному адресу любого присоединенного разделяемая память сегмент.
См. также
Ссылки
Последняя правка сделана 2021-06-07 04:27:14
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте