" 堆内存 " 动态分配 的 系统调用 过程 :
① 用户应用程序调用 : 开发者 在 " 用户空间 “ 的 应用程序 中调用 malloc
等函数 , 申请 动态分配 ” 堆内存 " ,
② 系统调用 : 用户空间 的 内存管理函数 调用 " 内核与用户层接口 “ 中的 brk
sbrk
mmap
munmap
等函数 , 这些函数就是 ” 系统调用 " 函数 ; 系统调用接口 是 用户层的 malloc
函数 与 内核层的 vmalloc
函数之间的 桥梁 ;
③ 内核层调用 : 内核与用户层接口 的 内存管理函数 调用 " Linux 内核 " 中的 kmalloc
vmalloc
函数 ;
C 语言中使用 malloc
free
等函数分配堆内存 , C++ 中使用的 new
delete
关键字管理内存 , 其本质还是调用 malloc
free
函数实现的内存管理 ;
内存管理流程 :
① 用户层 ( 用户空间 ) 内存管理 :
malloc
动态分配 " 堆内存 " , 使用 free
回收 " 堆内存 " ;new
关键字 动态分配 " 堆内存 " , 使用 delete
关键字 回收 " 堆内存 " ;② 系统调用接口 内存管理 : 调用 brk
sbrk
mmap
munmap
等系统调用函数 ,
brk
sbrk
函数 既可以分配内存 , 又可以回收内存 , 通过 修改 起始 和 终止 地址即可实现 ;mmap
函数用于分配内存 , munmap
函数用于回收内存 ;可参考 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 ) 博客 , 了解 brk 和 mmap 系统调用 ;
③ 内核层 ( 内核空间 ) 内存管理 : 在 Linux 内核中 , 通过 kmalloc
vmalloc
__get_free_pages
函数管理内存 ;