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 Купа (пам'ять) Керування пам'яттю

Посилання