内存管理是一个比较大的概念,大家可能在各个地方都会遇到,无论语言中的内存管理、操作系统中的内存管理、数据结构中的内存管理。虽说它们都是对于内存的管理,但是唯独不同的是它们前面的定语不同以及立场不同。比如说数据结构中的内存管理主要关注的是内存管理的方式以及方法,它说关注的并不是内存,它并不管这个内存是物理的还是虚拟的还是堆内存什么的。总的来说它并不在乎对象是什么,而在乎的是管理上的方法。而操作系统中的内存管理则是对于系统资源的管理,它们对的不只是物理内存的管理更有对虚拟内存的管理,虚拟内存又分为用户空间和内核空间。而语言中的内存管理则就是对用户空间的堆内存采用一定的方式和数据结构来进行管理,并且不同的操作系统对与内存资源的管理细节不尽相同,所以说操作系统中的内存管理是一个更大的范围。
下面来看看32位Linux操作系统的内存管理,那么不能不提这张图了。
这张图是从网上找到的,因为比较经典所以就贴过来了,第一次见的可能觉得有点神龙摆尾,但你仔细看就能发现中的奥秘了。
对于操作系统的内存管理我们应该遵循从物理内存到虚拟内存再到映射管理,所以先来看看Linux对于物理内存的管理。
x86的物理地址空间布局: