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