BRK(2) BRK(2)
НАЗВАНИЕ
brk, sbrk - изменение размера сегмента данных
СИНТАКСИС
int brk (endds)
char *endds;
char *sbrk (incr)
int incr;
ОПИСАНИЕ
Системные вызовы brk и sbrk используются для динамичес-
кого изменения количества оперативной памяти, выделен-
ной под сегмент данных процесса, делающего вызов [см.
exec(2)]. Это изменение достигается передвижением верх-
ней границы сегмента данных и выделением соответствую-
щего количества памяти. Далее под верхней границей по-
нимается адрес сразу за концом сегмента данных. Увели-
чение этого адреса соответствует увеличению количества
памяти, выделенной процессу. Вновь выделенная память
заполнена нулями. Однако, если некоторая область памяти
выделяется процессу повторно, ее содержимое будет неоп-
ределенным.
Системный вызов brk устанавливает верхнюю границу рав-
ной endds и соответственно изменяет количество памяти,
выделенной процессу.
Системный вызов sbrk передвигает верхнюю границу на
incr байт и соответственно изменяет количество памяти,
выделенной процессу. Значение incr может быть отрица-
тельным, в этом случае количество выделенной памяти
уменьшается.
Верхняя граница сегмента данных не передвигается и сис-
темные вызовы brk и sbrk завершаются неудачей, если вы-
полнено хотя бы одно из следующих условий:
[ENOMEM] Запрашиваемое действие привело бы к наруше-
нию системного ограничения на размер данно-
го процесса [см. ulimit(2)].
[EAGAIN] Общее количество системной памяти, предос-
тавленной для физического ввода/вывода,
временно оказалось недостаточным. Это может
случиться, даже если системное ограничение
на размер процесса не нарушается.
СМ. ТАКЖЕ
exec(2), ulimit(2), end(3C).
ДИАГНОСТИКА
При успешном завершении brk возвращает 0, а sbrk - ста-
рый адрес конца программы; в случае ошибки возвращается
-1, а переменной errno присваивается код ошибки.
|