malloc を呼び出すと vm_area_struct は変更されますか?

malloc を呼び出すと vm_area_struct は変更されますか?

私はLinuxの仮想メモリ領域について書かれた教科書を読んでいました ここに画像の説明を入力してください

vm_area_structa は仮想メモリ内の領域に関連付けられており、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 が作成されます。

関連情報