2015-06-30 3 views
-1

Что такое системный вызов sbrk в Unix и как его использовать в C? Большинство из них говорят, что malloc использует системный вызов sbrk для выделения памяти. Итак, как системный вызов sbrk выделяет память? Каковы аргументы и возвращаемый тип sbrk?Использование системного вызова sbrk в Unix

+0

Вы можете найти обсуждение этого вопроса в Kernighan & Ritchie, прямо в конце книги. Ну, этот последний раздел представляет собой реализацию 'malloc()' и 'free()' с помощью 'sbrk()' для получения памяти из системы. –

+1

http://man7.org/linux/man-pages/man2/sbrk.2.html. tl; dr: "Избегайте использования brk() и sbrk()" – rici

ответ

1

Определение функции: void *sbrk(intptr_t increment);

sbrk() увеличивает пространство данных программы по increment байт. Вызов sbrk() с приращением 0 может быть использован для поиска текущего местоположения разрыва программы.

От http://linux.die.net/man/2/sbrk

2

sbrk() принимает положительное целое число в качестве аргумента. Он увеличивает размер кучи текущего процесса на это количество байтов, а затем возвращает void * в новый конец кучи.

Однако информация, которую вы читаете, устарела. Процитирую страницу Mac OS X руководства для этого системного вызова:

В brk и sbrk функции исторические раритеты, оставшиеся от предыдущих дней до появления управления виртуальной памяти.

Современные системы не используют sbrk() для управления памятью, поскольку он невероятно ограничен. В частности, он не может управлять кучей, которая не смежна в памяти! Вместо этого они используют системный вызов mmap() для отображения новых диапазонов памяти по мере необходимости.

 Смежные вопросы

  • Нет связанных вопросов^_^