操作系统,虚拟内存,malloc分配器

讲计算机系统的时候我们提到了几个关键词:中间人,指令,基础,复用

本着以旧知识带动新知识的理念,我们来谈两个本质和系统相似的概念:虚拟内存;malloc分配器。

一.和计算机系统的异同:

1.同:中间人,指令,基础,复用

2.异:计算机系统为内存里的指令和cpu牵线;

       虚拟内存为硬盘里的指令和内存空间牵线;

       malloc分配器为硬盘指令和内存空间里的堆(内存空间里的一部份区域)牵线

二.计算机系统,虚拟内存和malloc分配器

通过上文我们知道,计算机系统的出现是为了解决内存指令和cpu之间的矛盾

(内存指令所需空间>cpu资源)

同理,虚拟内存是为了解决硬盘指令和内存空间之间的矛盾(硬盘指令所需空间>内存空间)。

狼多肉少造成的结果是,如果从硬盘里调动的指令足够多,内存地址不够用,那么必然有不同的程序指令会使用到相同的内存地址,造成混乱。

虚拟内存应运而生,负责管理和调度内存。

具体任务如下:

虚拟内存收到程序指令以后首先检查内存空间。

如果有空间,先给程序指令分配一个虚拟地址,这个虚拟地址实际上是不存在的,之后通过虚拟地址和物理地址的对照表(页表)对应找到其在内存里的物理地址。(通过转换避免了内存地址重复的可能)

如果没有多余的空间,虚拟内存会把一部分暂不使用的数据保存以后移出内存,腾出空间给更需要的程序指令。如此这般,程序员就会产生一种内存空间无限大的错觉,当然内存空间无限大是要有人付出代价的,这里要付出代价的就是虚拟内存,他需要不断检查移除虚拟内存的数据来维持内存空间无限大的假象。

至于malloc分配器呢,它是为了解决硬盘指令和内存空间里的堆之间的矛盾(硬盘指令所需空间>内存里的堆所需空间),原理同上。不过这里注意,既然堆也是内存里的一个区域,最后分配实际物理地址的时候一定也是要先通过虚拟内存的。

但不管怎样,它们首先都是指令是代码;其次它们出现的目的都是为了协调矛盾;且这些矛盾从始至终贯穿于计算机运行的核心操作流程里,足够基础,基础到我们有必要为它们起个名字来更好地复用。

你可能感兴趣的:(算法,改行学it,程序人生,机器学习,c语言)