sbrk

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку


brk і sbrkсистемні виклики у операційній системі Unix (і подібних), призначені для керування розміром сегменту даних програми.[1] Використовуються, як правило, більш високорівневими бібліотечними функціями керування пам'яттю, такими як malloc. У оригінальній системі Unix brk і sbrk були єдиним методом, за допомогою якого програма могла отримати додаткову пам'ять у своєму сегменті даних. Пізніші версії для такої мети дозволили також використання системного виклику mmap.[2]

Дані виклики декларуються у заголовному файлі 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 мегабайти.[3] Коли цей ліміт перевищено, у errno записується код помилки ENOMEM.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]

  1. Process Memory Concepts. Free Software Foundation. Процитовано 9 October 2015. 
  2. A new malloc(3) for OpenBSD. Процитовано 13 June 2018. 
  3. https://opensource.apple.com/source/Libc/Libc-763.12/emulated/brk.c