Главная » 2017 » Ноябрь » 17 » man 2 brk
01:21
man 2 brk

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


brk, sbrk - изменяет размер сегмента данных



ОБЗОР


#include <unistd.h>

int brk(void *addr);

void *sbrk(intptr_t increment);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

brk(), sbrk():
Начиная с glibc 2.19:
_DEFAULT_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
В glibc с 2.12 по 2.19:
_BSD_SOURCE || _SVID_SOURCE ||
(_XOPEN_SOURCE >= 500) &&
! (_POSIX_C_SOURCE >= 200112L)
До glibc 2.12:
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500



ОПИСАНИЕ


Вызов brk() и sbrk() изменяет расположение маркера окончания программы (program
break), который определяет конец сегмента данных процесса (т.е., маркер окончания
— это первая точка после конца сегмента неинициализированных данных). Увеличение
маркера окончания программы позволяет процессу выделить память; уменьшение маркера
приводит к освобождению памяти.

brk() устанавливает конец сегмента данных в значение, указанное в аргументе addr,
если это значение является приемлемым, система имеет достаточно памяти и процесс
не достиг максимально возможного размера своего сегмента данных (см.
setrlimit(2)).

sbrk() увеличивает пространство данных программы на increment байт. Вызов sbrk() с
increment равным 0 может быть использован для нахождения текущего местоположения
маркера окончания программы.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении brk() возвращает ноль. В случае ошибки возвращается -1, а
errno становится равной ENOMEM.

При успешном выполнении sbrk() возвращает предыдущий маркер окончания программы.
Если маркер окончания был увеличен, то это значение указывает на начало новой
выделенной памяти. В случае ошибки возвращается (void *) -1, а errno становится
равной ENOMEM.



СООТВЕТСТВИЕ СТАНДАРТАМ


4.3BSD; SUSv1, помечены как УСТАРЕВШИЕ в SUSv2, удалены из POSIX.1-2001.



ЗАМЕЧАНИЯ


Не используйте brk() и sbrk(): для выделения памяти функции malloc(3) являются
более переносимыми и удобными.

В различных системах используются различные типы для аргумента sbrk(). Обычно это
меньше ли новый маркер чем addr), возвращая значения 0 и -1, как описано выше.

В Linux, вызов sbrk() реализован в виде библиотечной функции, которая использует
системный вызов brk() и ведёт внутренний учёт для возврата старого значения
маркера окончания.



СМОТРИТЕ ТАКЖЕ


execve(2), getrlimit(2), end(3), malloc(3)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 492 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar