呼叫 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。

相關內容