2013-01-13 5 views
0

Руководство для int brk (void * end_data_segment); говорит: «brk() устанавливает конец сегмента данных в значение, указанное end_data_segment»Использование brk для получения brk_start

В случае успеха он возвращает 0 else -1.

Но как получить значение init моего разрыва (например, sbrk (0))?

наилучшими пожеланиями,

+0

Что именно неправильно с 'sbrk (0)'? (Оба 'brk' и' sbrk' не являются POSIX, btw) –

ответ

0

В ручными состояниях:

В случае успеха, БРК() возвращает ноль. В случае ошибки возвращается -1, а ERRNO устанавливается в ENOMEM

Таким образом, нет никакого способа, чтобы получить начальное значение через вызов brk. Вместо этого, как вы заметили, вы должны использовать sbrk(0):

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

Там нет никаких оснований ожидать brk также предоставить эту возможность, когда это уже предусмотрено sbrk(0). С учетом сказанного может быть более разумным использовать использование mmap в целом для ваших потребностей в распределении памяти из-за ограничений на некоторые операционные системы для brk/sbrk.

+0

Hm ... wikipedia говорит: «Текущая реализация sbrk для Mac OS X является эмуляцией и имеет максимальное выделение 4 мегабайт. [1] Когда этот предел , возвращается -1, а errno не задано. " Так что я должен использовать sbrk только для init? – user1735225

+0

Это поможет, если вы описали свои причины использовать 'sbrk' вообще. По умолчанию я бы ответил, что вы не должны его использовать. –

+1

@ user1735225 Я не знаю специфики реализации Mac OS X, и это выходит за рамки этого конкретного вопроса, и я предлагаю вам спросить другого, чтобы кто-то более квалифицированный мог ответить на него. Однако, как сказал Антон, я бы рекомендовал не использовать 'sbrk' вообще, предпочитаю' mmap' для ваших потребностей в распределении памяти. Кроме того, если приведенное выше разъясняет ваш первоначальный вопрос, рассмотрите [его принятие] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). –

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