Что такое системный вызов sbrk
в Unix и как его использовать в C? Большинство из них говорят, что malloc
использует системный вызов sbrk
для выделения памяти. Итак, как системный вызов sbrk
выделяет память? Каковы аргументы и возвращаемый тип sbrk?Использование системного вызова sbrk в Unix
ответ
Определение функции: void *sbrk(intptr_t increment);
sbrk() увеличивает пространство данных программы по
increment
байт. Вызов sbrk() с приращением 0 может быть использован для поиска текущего местоположения разрыва программы.
sbrk()
принимает положительное целое число в качестве аргумента. Он увеличивает размер кучи текущего процесса на это количество байтов, а затем возвращает void *
в новый конец кучи.
Однако информация, которую вы читаете, устарела. Процитирую страницу Mac OS X руководства для этого системного вызова:
В
brk
иsbrk
функции исторические раритеты, оставшиеся от предыдущих дней до появления управления виртуальной памяти.
Современные системы не используют sbrk()
для управления памятью, поскольку он невероятно ограничен. В частности, он не может управлять кучей, которая не смежна в памяти! Вместо этого они используют системный вызов mmap()
для отображения новых диапазонов памяти по мере необходимости.
Вы можете найти обсуждение этого вопроса в Kernighan & Ritchie, прямо в конце книги. Ну, этот последний раздел представляет собой реализацию 'malloc()' и 'free()' с помощью 'sbrk()' для получения памяти из системы. –
http://man7.org/linux/man-pages/man2/sbrk.2.html. tl; dr: "Избегайте использования brk() и sbrk()" – rici