【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )
生活随笔
收集整理的這篇文章主要介紹了
【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、Linux 系統 動態分配堆內存 方式
- 二、brk 系統調用 動態分配堆內存
一、Linux 系統 動態分配堆內存 方式
Linux 系統中 , 提供了 222 種方式 進行 " 動態分配堆內存 " 操作 ;
① brk 系統調用 : 該方式本質是 設置 " 進程數據段 “ 的 結束地址 , 將該 ” 結束地址 " 向 高或低 移動 , 實現堆內存的 擴張或收縮 ;
② mmap 系統調用 : 向 Linux 操作系統 申請 " 虛擬地址空間 " 內存 , 并且將某個文件 " 映射 “ 到該申請的內存中 ; 如果 不需要映射文件 到該空間中 , 則該空間就是 ” 匿名空間 " , 可作為 " 堆內存 " 使用 ;
二、brk 系統調用 動態分配堆內存
" brk 系統調用 “ 可以指定 ” 堆內存 “ 在 ” 虛擬內存空間 “ 的 ” 結束地址 " ;
如果要 " 擴張 " 堆內存 , 可以將 結束地址 " 大于當前值 " ,
如果要 " 收縮 " 堆內存 , 可以將 結束地址 " 小于當前值 " ;
brk 系統調用 源碼在 Linux 源碼中的 linux-5.6.18\mm\mmap.c#187 源碼中定義 ;
SYSCALL_DEFINE1(brk, unsigned long, brk) {unsigned long retval;unsigned long newbrk, oldbrk, origbrk;struct mm_struct *mm = current->mm;struct vm_area_struct *next;unsigned long min_brk;bool populate;bool downgraded = false;LIST_HEAD(uf);// ... }源碼路徑 : linux-5.6.18\mm\mmap.c#187
總結
以上是生活随笔為你收集整理的【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核 内存管理】Linux
- 下一篇: 【Linux 内核 内存管理】Linux