170 похожих чатов

Парни, такой вопрос. Сейчас читаю про устройство маллока(пока плохо понимаю,

если буду ошибаться - поправьте)

Вот там получается так, что у процесса изначально есть какой-то участок памяти в страницах. sbrk() указывает на конец этой памяти. brk() позволяет добавить еще несколько страниц памяти к процессу. malloc затем берет нужное количество байт и записывает в них служебные данные. Причем чтобы free всегда знал сколько памяти надо высвобождать(кстати, память высвобождается внутри процесса или она отдается ядру?) туда кладется размер который иначально задается в malloc. Эти служебные данные называются чанком и они занимают первые байты https://github.com/bminor/glibc/blob/85e6d8b4175fcb195011a0a1bad37d6f3b2355db/malloc/malloc.c#L1161

Тогда почему при разыменовании указателя я получаю сразу юзерспейс данные а не служебку

5 ответов

27 просмотров

Потому что служебные данные лежат по отрицательному смещению

во-первых, нормальному современному маллоку сбрк нафиг не нужен. как и нормальному современному чему угодно ответ на вопрос: потому что перед тем, как отдать указатель тебе, маллок подправит его, чтобы указывал на отданную тебе память, а не какую-то там

потому что служебка это детали реализации, и не нужны пользователю маллока

Vladislav-Vasil'ev Автор вопроса
Ivan Sokolov
во-первых, нормальному современному маллоку сбрк н...

А, вот как отрицательное смещение работает, понял, да

Ivan Sokolov
во-первых, нормальному современному маллоку сбрк н...

Не слишком важное уточнение: на сколько я помню, метаинформация о текущем чанке лежит в конце предыдущего чанка, поэтому указатель на чанк совпадает с указателем возвращенным malloc. Правда я не помню как это работает с первым чанком.

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
embassy это топ фреймворк для эмбеддед на данный момент?
AS Sarb
23
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
Ребята, я 3 дня как вкатился в ардуино Думал на прогрессивном молодом языке Rust попилить что-нибудь А как-то грустно с библиотеками оказалось. Не подскажете почему так? Если...
AS Sarb
18
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Карта сайта