Используя brk, чтобы получить brk_start
Руководство для int brk(void *end_data_segment); говорит: "brk() устанавливает конец сегмента данных на значение, указанное в end_data_segment"
В случае успеха возвращается 0 или -1.
Но как мне получить значение инициализации моего перерыва (например, sbrk(0))?
с уважением,
1 ответ
Как указано в руководстве:
В случае успеха brk() возвращает ноль. При ошибке возвращается -1, а errno устанавливается в ENOMEM
Таким образом, нет способа получить начальное значение с помощью вызова brk
, Вместо этого, как вы заметили, вы должны использовать sbrk(0)
:
sbrk() увеличивает пространство данных программы на байты приращения. Вызов sbrk() с шагом 0 может быть использован для определения текущего местоположения остановки программы.
Нет причин ожидать brk
также предоставить эту возможность, когда она уже предоставлена sbrk(0)
, С учетом сказанного, может быть более разумным использовать использование mmap
в целом для ваших потребностей выделения памяти, из-за ограничений на определенные операционные системы для brk
/ sbrk
,