brk і sbrk — системні виклики у операційній системі Unix (і подібних), призначені для керування розміром сегмента даних програми. Використовуються, як правило, більш високорівневими бібліотечними функціями керування пам'яттю, такими як malloc. У оригінальній системі Unix brk і sbrk були єдиним методом, за допомогою якого програма могла отримати додаткову пам'ять у своєму сегменті даних. Пізніші версії для такої мети дозволили також використання системного виклику mmap.
Дані виклики декларуються у заголовному файлі unistd.h наступним чином:
#include <unistd.h>
int brk(void *end_data_segment);
void *sbrk(intptr_t increment);
Функція brk встановлює адресу кінця сегмента даних програми згідно з наданим значенням end_data_segment.
Функція sbrk додає параметр increment до поточного значення адреси кінця сегмента даних. Параметр increment може бути від'ємним — у такому випадку розмір сегмента даних зменшується. Виклик функції з нульовим значенням параметру increment дозволяє отримати програмі поточну адресу кінця сегмента даних.
При успішному виконанні brk повертає значення 0, а sbrk — нове значення адреси кінця сегмента даних. Якщо сталася помилка, повертається значення −1 і глобальній змінній errno надається значення помилки.
У операційній системі Mac OS X функція sbrk емулюється, максимум можна виділити 4 мегабайти. Коли цей ліміт перевищено, у errno записується код помилки ENOMEM.
Див. також
exec Купа (пам'ять) Керування пам'яттю
Посилання