调用 malloc 时 vm_area_struct 会改变吗?

调用 malloc 时 vm_area_struct 会改变吗?

我正在读一本关于 Linux 虚拟内存区域的教科书 在此输入图像描述

可以看到,avm_area_struct与虚拟内存中的一个区域相关,vm_start指向vm_end该区域的开头和结尾。

我们知道内核维护了一个brk指向堆顶的指针。所以我的问题是,假设当我们调用malloc分配所请求的内存时没有可用的空闲块,因此在这种情况下,malloc内部调用mmapsbrk获取所请求的内存,因此brk指针将递增/增长,然后堆的vm_area_struct变化为好吧,例如vm_end将递增以指向最新的brk

答案1

是,brk修改 VMA 以匹配更改后的分配。这发生在do_brk_flags:在检查分配是否可行并清理现有 VMA 后,更新brk会导致更新现有 VMA(如果存在适当的 VMA)或创建新 VMA。

相关内容