文章目录

  • 一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )
  • 二、内核空间内存管理
    • 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )
    • 2、sys_brk、sys_mmap 系统调用

一、用户空间内存管理 ( 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 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 " , 可作为 " 堆内存 " 使用 ;

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

  1. php从内存中获取源码_【PHP7源码分析】PHP内存管理

    作者: 顺风车运营研发团队 李乐 第一章 从操作系统内存管理说起 程序是代码和数据的集合,进程是运行着的程序:操作系统需要为进程分配内存:进程运行完毕需要释放内存:内存管理就是内存的分配和释放: 1. ...

  2. 无盘服务器大内存的好处,4GB+64GB够用?看完秒懂,原来大内存还有那么多好处...

    原标题:4GB+64GB够用?看完秒懂,原来大内存还有那么多好处 随着智能手机的普及,手机APP也随之而来,成了我们生活的一部分.但是,随着APP数量的增多和体量的增大,也占据了手机的大部分内存,让不 ...

  3. C语言 利用malloc()和realloc()动态分配内存

    1. C语言定义1个数组的时候, 必须同时指定它的长度. 例如: int a[5]={1,2,3,4,5}; //合法 int b[6]; //合法int c[]; //错误 因为没有指定长度 但是下 ...

  4. 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )

    文章目录 一.用户虚拟地址空间组成 二.内存描述符 mm_struct 结构体源码 一.用户虚拟地址空间组成 " 用户虚拟地址空间 " 包括以下区域 : ① 代码段 ② 数据段 ③ ...

  5. Linux 内存管理与系统架构设计

    Linux 提供各种模式(比如,消息队列),但是最著名的是 POSIX 共享内存(shmem,shared memory). Linux provides a variety of schemes ( ...

  6. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  7. 显卡 内存分配 linux,【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制...

    显卡使用的内存分为两部分,一部分是显卡自带的显存称为VRAM内存,另外一部分是系统主存称为GTT内存(graphics translation table和后面的GART含义相同,都是指显卡的页表,G ...

  8. 从结构体、内存池初始化到申请释放,详细解读鸿蒙轻内核的动态内存管理

    摘要:本文带领大家一起剖析了鸿蒙轻内核的动态内存模块的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dyna ...

  9. Linux云计算架构-用户及用户组管理

    文章目录 Linux云计算架构-用户及用户组管理 1. 用户管理命令 1. 查看用户信息 2. 添加用户 3. 添加组 4. 修改用户信息 5. 修改组信息 6. 删除用户 7. 删除组 8. 用户密 ...

最新文章

  1. 建立企业级产品测试报告体系(概述)
  2. 3-openstack之keystone上
  3. windows 远程桌面 启动方式
  4. 基于STM32分析栈、堆、全局区、常量区、代码区、RAM、ROM
  5. 最大后验估计_PR Ⅱ:贝叶斯估计/推断及其与MAP的区别
  6. python中分支结构包括哪些_python中的分支结构
  7. LeetCode 1062. 最长重复子串(二分查找)
  8. LeetCode 532. K-diff Pairs in an Array
  9. 由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了...
  10. 软工课设第一周周四报告
  11. php 修改文件的权限_php修改文件权限
  12. Aruba7010 默认密码_收藏 | 各大品牌的变频器默认密码、万能密码、超级密码汇总...
  13. python实现栅栏密码加解密
  14. 虚拟机 Ubuntu 联网设置
  15. 浅谈Python爬虫(四)【英雄联盟人物背景故事爬取】
  16. iOS开发之GameCenter使用
  17. 利用Tushare获取A股所有股票代码
  18. 如何改进企业旧式工时管理系统?
  19. 关于MongoDB的Write Concern
  20. java namevaluepair_NameValuePair方式传参数

热门文章

  1. vs2012 智能提示消失解决办法
  2. 红楼梦 --- 花开在眼前
  3. [转载] 什么时候应该使用 ==?什么时候应该使用 Equals?
  4. Linux入侵类问题排查思路
  5. 20180827-Java网络编程
  6. Lintcode 167. 链表求和 221. 链表求和 II 题解
  7. Spring学习五(JDBC支持)
  8. 关于tomcat8在windows2008下高并发下问题的解决方案
  9. ps -aux返回超过100%
  10. map中的erase成员函数用法