【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)
文章目錄
- 一、用戶空間內(nèi)存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )
- 二、內(nèi)核空間內(nèi)存管理
- 1、內(nèi)核內(nèi)存管理系統(tǒng)調(diào)用 ( sys_brk | sys_mmap | sys_munmap )
- 2、sys_brk、sys_mmap 系統(tǒng)調(diào)用
一、用戶空間內(nèi)存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )
" 應(yīng)用程序 " 通過(guò)使用
C 中的 malloc / free 函數(shù) ,
或者 C++ 中的 new / delete 函數(shù) ,
glibc 提供的 ptmalloc 函數(shù) , FreeBSD 提供的 jemalloc 函數(shù) , Google 提供的 tcmalloc 函數(shù) ,
操作 堆內(nèi)存 ;
上述函數(shù) 都是 " 用戶空間 " 操作內(nèi)存的函數(shù) ;
malloc / free 函數(shù) 是 glibc 函數(shù)庫(kù) ( GNU 發(fā)布的 libc 庫(kù) ) 的 " 內(nèi)存分配器 " , 由 ptmalloc 函數(shù)提供 內(nèi)存操作接口 ;
glibc 庫(kù)提供的 ptmalloc 函數(shù) 的原理是 , 調(diào)用 Linux 內(nèi)核 提供的 brk / mmap 系統(tǒng)調(diào)用接口 , 以 " 內(nèi)存頁(yè) “ 為單位 , 申請(qǐng)內(nèi)存 , 然后將申請(qǐng)的內(nèi)存 分成 ” 內(nèi)存塊 “ 分配給 用戶空間 的 ” 應(yīng)用程序 "
二、內(nèi)核空間內(nèi)存管理
1、內(nèi)核內(nèi)存管理系統(tǒng)調(diào)用 ( sys_brk | sys_mmap | sys_munmap )
在 " 內(nèi)核空間 " 中 , 調(diào)用 Linux 內(nèi)核中的 sys_brk / sys_mmap / sys_munmap 函數(shù) , 管理 " 堆內(nèi)存 " ;
- sys_brk 通過(guò)修改 堆內(nèi)存 的 終止地址 , 擴(kuò)張 / 收縮 堆內(nèi)存 ;
- sys_mmap 在 " 內(nèi)存映射區(qū) " 分配 " 虛擬內(nèi)存頁(yè) " ;
- sys_munmap 釋放 " 虛擬內(nèi)存頁(yè) " ;
上述函數(shù)屬于 " 虛擬內(nèi)存管理 “ , 虛擬內(nèi)存管理 從 ” 進(jìn)程虛擬地址空間 “ 分配 / 釋放 ” 虛擬內(nèi)存頁(yè) " ;
2、sys_brk、sys_mmap 系統(tǒng)調(diào)用
可參考 【Linux 內(nèi)核 內(nèi)存管理】Linux 內(nèi)核堆內(nèi)存管理 ② ( 動(dòng)態(tài)分配堆內(nèi)存方式 | brk 系統(tǒng)調(diào)用 | mmap 系統(tǒng)調(diào)用 | brk 系統(tǒng)調(diào)用源碼介紹 ) 博客 ;
① brk 系統(tǒng)調(diào)用 : 該方式本質(zhì)是 設(shè)置 " 進(jìn)程數(shù)據(jù)段 “ 的 結(jié)束地址 , 將該 ” 結(jié)束地址 " 向 高或低 移動(dòng) , 實(shí)現(xiàn)堆內(nèi)存的 擴(kuò)張或收縮 ;
② mmap 系統(tǒng)調(diào)用 : 向 Linux 操作系統(tǒng) 申請(qǐng) " 虛擬地址空間 " 內(nèi)存 , 并且將某個(gè)文件 " 映射 “ 到該申請(qǐng)的內(nèi)存中 ; 如果 不需要映射文件 到該空間中 , 則該空間就是 ” 匿名空間 " , 可作為 " 堆內(nèi)存 " 使用 ;
總結(jié)
以上是生活随笔為你收集整理的【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Linux 内核 内存管理】内存管理架
- 下一篇: 【Linux 内核 内存管理】内存管理架