Linux c++ 内存管理知识索引
2020-07-01 本文已影响0人
JimmyPan
分配内存流程.png
背景知识
虚拟内存和物理内存之间依靠mmu进行映射
一.虚拟内存管理
在32为的cpu 上, 有4G的虚拟内存空间
其中3:1的比例分为3G的用户空间和1G的内核空间
内核又分为896mb固定分配空间(不发生缺页中断,先分配好固定地址,再分配虚拟线性地址)
和128mb动态分配空间(为了内核访问全部内存)
用户空间全部是动态分配空间
动态分配的意思是,先申请虚拟地址,当使用的时候再去动态的分配物理地址。
当用户进行new和malloc是,最终调用brk或者mmap,只在3G用户空间虚拟内存上进行申请
二.物理内存管理
当用户使用一块 第一次被访问的内存时,会发生缺页中断,发生缺页中断时向slab/伙伴系统请求物理内存,请求好后在页面表内建立映射关系后,cpu就可以通过虚拟地址进行访问
- new和operator new: 侯捷c++内存管理
- 标准库alloctor: 侯捷c++内存管理
- malloc:https://www.jianshu.com/p/2fedeacfa797
- mmu/缺页中断:
- pageCache:
- slab/buddy:https://zhuanlan.zhihu.com/p/73562347