操作系统管理内存空间(什么时候需要内存!):
1, 当程序需要加载 需要分配内存(连续的内存空间)
2, 当程序需要数据 需要给数据分配内存(连续的内存空间)
操作系统分配内存的简单算法(连续内存):
1,首次分配 在一个内存块之中,按照需求的空间大小找到第一个符合需求的空间块(按照地址找),但是容易产生外碎片(比如一个内存之中有一个空闲块500,但是需求 400,就导致外碎片100),下一次会往后找,依次循环,会越来越多碎片。
2,最优分配 在一个内存块之中,找到最适合需求的空闲块,这样找到的最贴近,碎片会小很多。但是会产生很小的碎片利用不起来,算法执行起来速度较慢。
3,最坏算法 与最优分配相反,找的是最大的空间块, 好处是将大块切成小块,小块保留,避免产生太多微小的内存块,但是大内存需求不友好
非连续内存分配:分段
1,分段是将逻辑地址进行切割,堆,栈,应用程序,数据进行分离,这样有效的保护以及有效的管理
2,段访问机制是通过硬件来进行访问的。段寄存器 ,一个段对应的一个内存块,对应关系存储到段表之中
3,段表存放着段的起始地址以及段的长度(偏移),段号对应着地址块的首地址.
4,逻辑地址通过短号+段的长度 就是实际的物理地址
非连续内存分配:分页
1,绝大数cpu 采用的是分页的内存分配
2,分页也有着页号与偏移