> For the complete documentation index, see [llms.txt](https://rollingchairs-study.gitbook.io/ji-suan-ji-ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rollingchairs-study.gitbook.io/ji-suan-ji-ji-chu/nei-cun.md).

# 内存

**虚拟内存**\
我们用的内存其实实际上讲的是虚拟内存.主要是通过物理内存的映射(mmu)在每一个程序启动中都能分到一块虚拟内存.\
这涉及到一个知识点.如果现在想访问其他内存中的数据,常见于基础的内存注入手段的过程.并不是直接访问内存的地址就可以读取.\
为了不让内存产生冲突,虚拟内存是互相不干扰的,所以如果想访问到一块其他内存的数据,必须先寻找到该程序的进程(pid),再打开内存.(一开始对内存不够了解的时候我就犯过这个问题)

**内存分段**\
我感觉讲的通俗一点就是,物理内存给虚拟内存分完后,虚拟内存的再分段规划好了容量,防止产生内存溢出的问题,内存分段,主要是通过虚拟内存段的基地址再加上段的偏移量来确定内存的范围.也可以确定物理内存的位置\
内存分段的主要问题,内存碎片的问题,因为当内存256m的内存如果不连续的时候,他就只能变成两个128m的内存,这样就无足够的内存打开其他程序.\
所以产生了内存交换的解决方法.但是内存交换的方法是,先将数据写到储存空间,等内存碎片整合后再重新读取.这样的问题是效率低下.访问内存的速度肯定比储存快的多\
我也是看完内存交换才明白一个之前遇到的问题,为什么文档linux重新分配储存后,开机的速度慢了很多.在linux下有个swap空间,swap主要的作用就是进行内存的交换,所以我调整的时候估计是swap分配的太少了,所以导致内存效率低下了\
\
**内存分页**\
目前操作系统的主流选择.\
好肯定是有他好的道理,我大白话的感觉一下就是\
1分页分给每个虚拟内存的大小是相对固定的,4kb-8kb,有效的分配内存的大小调度更好\
2产生的内存碎片更少,因为分配的需求较少,所以用多少,拿多少,碎片也少\
(肯定也还有其他优势,我就写点感觉最明显的)\
问题也会有\
1可以简单的把内存分页看成单线程的处理模式,没办法简化内存需求的量,所以如果进程多起来就内存需要的量也必须非常大\
解决办法是多级分页内存,类似于判断的结构\
\
**多级分页内存**\
我懒得写了,看后面资料把\
\
**资料参考**\
<https://mp.weixin.qq.com/s/m-AmxDVUfko7OTUsCapnPA><br>
