3.1 windows xp ,ReactOS系统内存区间的动态分配
3.1 windows xp ,ReactOS系统内存区间的动态分配
3.1 内存区间的动态分配
不管是什么程序,除程序代码本身所占用的空间以外,在运行的过程中总得使用一定的内存空间,因为数据也要占用空间。实际用于数据存储的内存区间可以分成三类:
全局量数据所占用的空间,这是由编译/连接工具在编译/连接的时候就静态地分配好的,并且与整个可执行程序共存亡,只要程序还没有退出运行,这部分空间就不会被释放。对于运行中的程序而言,这部分空间是与生俱来的,其分配和释放都是不可见、不可为的。
局部量数据所占用的空间,一般是在调用一个子程序即函数的时候自动从堆栈上动态分配的,存在于这个函数的调用“框架”之中,其寿命取决于 CPU 运行于这个函数中的时间。一旦CPU从这个函数返回,包括有关局部量在内的相应框架就不复存在,这些局部量所占的空间就被自动释放了。对于运行中的程序而言,这部分空间的分配和释放是隐含的,所以也是不可见的,并且基本上(在高级语言中)是不可为的。
通过malloe0一类的函数动态分配的缓冲区,所占的空间既不像全局量所占的空间那样永久,也不像局部量所占的空间那样短暂,而一直会存在到通过freeO一类的函数加以释放,或者直到程序退出运行。对于运行中的程序而言,这部分空间的分配和释放是可见和可为的,运行中的程序完全掌握着主动,也承担着责任。
本节以属于上述第三类内存区间的动态分配为情景,叙述用户空间的内存管理。这个情量实际上将贯穿本章,因为其过程几乎涉及与内存管理有关的所有角落。