
Eu estava lendo um livro que fala sobre áreas de memória virtual do Linux
podemos ver que a vm_area_struct
está relacionado a uma área da memória virtual vm_start
e vm_end
aponta para o início e o fim da área.
Sabemos que o kernel mantém um brk
ponteiro que aponta para o topo da pilha. Então minha pergunta é, digamos que não haja blocos livres disponíveis quando chamamos malloc
para alocar a memória solicitada, então neste caso, malloc
chame internamente mmap
ou sbrk
para obter a memória solicitada, portanto brk
o ponteiro será incrementado/crescido, então o heap vm_area_struct
mudará como bem, por exemplo, vm_end
será incrementado para apontar para o mais recente brk
?
Responder1
Sim, brk
modifica os VMAs para corresponder à alocação alterada. Isso acontece emdo_brk_flags
: após verificar se a alocação é possível e limpar os VMAs existentes, a atualização brk
resulta na atualização de um VMA existente (se existir um VMA apropriado) ou na criação de um novo VMA.