Используя 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,

Другие вопросы по тегам