
Я читал учебник, в котором говорилось о виртуальных областях памяти Linux.
мы видим, что a vm_area_struct
относится к области в виртуальной памяти vm_start
и vm_end
указывает на начало и конец этой области.
Мы знаем, что ядро поддерживает brk
указатель, который указывает на вершину кучи. Поэтому мой вопрос: допустим, что нет доступных свободных блоков, когда мы вызываем malloc
для выделения запрошенной памяти, поэтому в этом случае malloc
внутренне вызываем mmap
или sbrk
для получения запрошенной памяти, поэтому brk
указатель будет увеличиваться/расти, тогда изменится ли также куча vm_area_struct
, например, vm_end
будет увеличиваться, чтобы указывать на последний brk
?
решение1
Да, brk
изменяет VMA для соответствия измененному распределению. Это происходит вdo_brk_flags
: после проверки возможности выделения и очистки существующих VMA обновление brk
приводит либо к обновлению существующей VMA (если существует соответствующая VMA), либо к созданию новой VMA.