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. Архів оригіналу за 11 жовтня 2015. Процитовано 9 жовтня 2015.
  2. A new malloc(3) for OpenBSD (PDF). Архів оригіналу (PDF) за 22 серпня 2017. Процитовано 13 червня 2018.
  3. Архівована копія. Архів оригіналу за 9 серпня 2018. Процитовано 9 серпня 2018.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)