前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

作者头像
韩曙亮
发布2023-03-30 14:18:15
9530
发布2023-03-30 14:18:15
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )


" 应用程序 " 通过使用

C 中的 malloc / free 函数 ,

或者 C++ 中的 new / delete 函数 ,

glibc 提供的 ptmalloc 函数 , FreeBSD 提供的 jemalloc 函数 , Google 提供的 tcmalloc 函数 ,

操作 堆内存 ;

上述函数 都是 " 用户空间 " 操作内存的函数 ;

malloc / free 函数 是 glibc 函数库 ( GNU 发布的 libc 库 ) 的 " 内存分配器 " , 由 ptmalloc 函数提供 内存操作接口 ;

glibc 库提供的 ptmalloc 函数 的原理是 , 调用 Linux 内核 提供的 brk / mmap 系统调用接口 , 以 " 内存页 “ 为单位 , 申请内存 , 然后将申请的内存 分成 ” 内存块 “ 分配给 用户空间 的 ” 应用程序 "

二、内核空间内存管理


1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )

在 " 内核空间 " 中 , 调用 Linux 内核中的 sys_brk / sys_mmap / sys_munmap 函数 , 管理 " 堆内存 " ;

  • sys_brk 通过修改 堆内存 的 终止地址 , 扩张 / 收缩 堆内存 ;
  • sys_mmap 在 " 内存映射区 " 分配 " 虚拟内存页 " ;
  • sys_munmap 释放 " 虚拟内存页 " ;

上述函数属于 " 虚拟内存管理 “ , 虚拟内存管理 从 ” 进程虚拟地址空间 “ 分配 / 释放 ” 虚拟内存页 " ;

2、sys_brk、sys_mmap 系统调用

可参考 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 ) 博客 ;

① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或收缩 ;

② mmap 系统调用 : 向 Linux 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 " , 可作为 " 堆内存 " 使用 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )
  • 二、内核空间内存管理
    • 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )
      • 2、sys_brk、sys_mmap 系统调用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档