В ручными состояниях:
В случае успеха, БРК() возвращает ноль. В случае ошибки возвращается -1, а ERRNO устанавливается в ENOMEM
Таким образом, нет никакого способа, чтобы получить начальное значение через вызов brk
. Вместо этого, как вы заметили, вы должны использовать sbrk(0)
:
sbrk() увеличивает пространство данных программы путем увеличения байтов. Вызов sbrk() с приращением 0 может использоваться для нахождения текущего местоположения программы break.
Там нет никаких оснований ожидать brk
также предоставить эту возможность, когда это уже предусмотрено sbrk(0)
. С учетом сказанного может быть более разумным использовать использование mmap
в целом для ваших потребностей в распределении памяти из-за ограничений на некоторые операционные системы для brk
/sbrk
.
Что именно неправильно с 'sbrk (0)'? (Оба 'brk' и' sbrk' не являются POSIX, btw) –