Jump to content

сбрк

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

Описание

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

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

сбрк и brk считались устаревшими даже по стандартам 1997 года ( Единая спецификация UNIX v2 или POSIX.1-1998). [ 5 ] Они были удалены в POSIX.1-2001. [ 6 ]

Сигнатуры функций и поведение

[ редактировать ]
#include <unistd.h>

int brk(void* end_data_segment);
void *sbrk(intptr_t increment);

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

В случае успешного завершения, Функция brk возвращает значение 0, а функция Функция sbrk возвращает предыдущее значение разрыва программы (если доступное пространство увеличивается, то это предшествующее значение также указывает на начало новой области). значение -1 и Если какая-либо из подпрограмм завершилась неудачно, возвращается errno Глобальная переменная установлена ​​для указания ошибки. [ 5 ]

Не каждая Unix-подобная система поддерживает концепцию управления сегментом данных пользователем. Mac OS X Реализация sbrk является эмуляцией и имеет максимальное выделение 4 мегабайт. При первом вызове для хранения моделируемого сегмента выделяется именно такая большая область. Когда этот предел достигнут, возвращается -1 и ошибка установлена ​​на ЭНОМЕМ . брк всегда ошибки. [ 7 ]

Коды ошибок

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

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

  • Запрошенное изменение выделяет больше места, чем разрешено установленным системой максимумом.
  • Запрошенное изменение устанавливает значение разрыва, большее или равное начальному адресу любого подключенного сегмента общей памяти .

См. также

[ редактировать ]
  1. ^ «Концепции памяти процесса» . Фонд свободного программного обеспечения . Проверено 9 октября 2015 г.
  2. ^ «Новый malloc(3) для OpenBSD» (PDF) . Проверено 13 июня 2018 г.
  3. ^ «Управление памятью POSIX» . blog.pr4tt.com .
  4. ^ Спецификация X / Open CAE, системные интерфейсы и заголовки (PDF) (2-е изд.). X/Open Company Ltd., Великобритания, сентябрь 1994 г., с. 64 . Проверено 9 октября 2015 г.
  5. ^ Перейти обратно: а б "brk, sbrk - изменить распределение пространства (LEGACY)" . Единая спецификация UNIX®, версия 2 . 1997 год . Проверено 30 ноября 2019 г.
  6. ^ brk(2) Linux программиста Руководство – Системные вызовы
  7. ^ «БРК.с» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d9f4d798fe70559277dfb39b2726ed49__1715748660
URL1:https://arc.ask3.ru/arc/aa/d9/49/d9f4d798fe70559277dfb39b2726ed49.html
Заголовок, (Title) документа по адресу, URL1:
sbrk - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)