内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。
一个运行中的程序,譬如网页浏览器在个人电脑或是图灵机(Turing machine)里面,为一个进程将数据转换于真实世界及电脑内存之间,然后将数据存于电脑内存内部(在计算机科学,一个程序是一群指令的集合,一个进程是电脑在运行中的程序)。内存能被实际组织在许多方法里头,例如磁带或是磁盘,或是小数组容量的微芯片。 从1950年代开始,计算机变的更复杂,它被连接于许多种类的内存。内存管理的任务也变得复杂,甚至必须要在同一台机器上相同的时间运行多个进程。
在内存内,一个程序(操作系统)在每一个数据区块持续地追踪实体位置,及移动实体上的数据去改善其性能及保证可靠性,对于每个用户层(user-level)的程序,操作系统分配一段虚拟内存空间,当进程起始时,不需要移动数据到实体设备间,数据存于磁盘内的虚拟内存空间,也不需要去配置主存空间给该进程,当用户有需要用到时,他们才会很自由地加载到主存内。
可以想像一个很大的程序,当他运行时变成进程,而大部分的内存空间都被存到磁盘内虚拟内存地址,需要用到的部分才被加载到内存内部提供服务。
主存使用
一个程序结构由以下两部分而成:
“本文区块”,也就是指令存放,提供CPU使用及运行
“数据区块”,存储程序内部本身设置的数据,例如常数字符串,像是GUI接口内部一些文字消息,或是程序设计时所放入的消息数据,数据可借由程序运行时由输入(input)的方式加入,或者经由程序运行的流程中被移除。
当一个程序运行,操作系统将程序的数据区块及本文区块映射到虚拟内存空间内部,然后在内存运行程序的指令,无论如何,当程序运行时就必须去存储暂时性的数据,或更重要的,它会调用一些函数(function)或是例程(subroutine),并且存储当前函数的状态,最好的数据结构方法,数据由堆栈(stack)的方式存储,当我们完成这个函数,数据会由堆栈的pop方式取出,堆栈将会在函数的生命周期内动态的成长,操作系统提供区分本文区块及数据区块,而堆栈区块则在一个进程的最顶端,这种方式称为段式结构(segments)或“分段