WINDOWS 内存管理笔记

来源:互联网 发布:指向数组元素的指针 编辑:程序博客网 时间:2024/06/04 19:37

以下内容摘抄自《精通windows API函数、接口编程实例》

在编写应用程序时,程序员不用过多地考虑系统底层是如何实现这种机制的。在进行应 用程序开发时,开发人员只需要了解以下内容。
(1)虚拟地址空间中的数据是分页管理的。
(2)应用程序不用考虑系统中其他应用程序的内存使用情况,如占用了多少内存、占用 了哪些内存等。
(3)虚拟地址并不是物理地址空间中的地址,不是数据在内存中真实存在的地址,操作 系统会将进程的虚拟地址映射到真实的物理内存的地址。
(4)进程也不用考虑真实的物理内存有多大,只需要了解可以使用 2GB(一般情况下) 的内存,操作系统负责转换。
(5)如果系统中没有足够的物理内存供使用,那么操作系统会将当前没有使用的内存分 页“调度”到硬盘上保存起来。页面调度不会造成内存中的数据在虚拟地址空间中地址的改 变,所以进程不需要知道内存分页是如何调度的,不需要知道内存中保存的数据是在内存中 还是在硬盘上,只需要知道其虚拟地址就可以了。

虚拟内存布局、内存的分工、堆与栈

 进程的虚拟内存空间分为两个部分,低 2GB(或 3GB_)由应用程序使用,高 2GB(或 1GB) 由系统内核程序使用。  系统内核的内存空间中包括驱动程序,系统内核可执行程序、用于内存管理的数据结构(页 目录、页表等),用于进程管理、线程调度的数据结构、各种中断处理程序,系统缓存等。      应用程序可使用的低地址空间中包括了应用程序的代码、数据(全局变量等)、系统和 用户 DLL 的代码、各线程的栈、堆等。      栈和堆是两种重要的内在管理形式。      进程的每个线程都有自己的栈,栈与函数的调用、执行和返回及局部变量的保存相关, 一般情况下,栈中保存着函数的参数、返回地址和局部变量,调用函数将参数入栈,调用指 令将函数返回地址入栈,被调用函数负责保存调用函数的相关栈指针,为局部变量分配空间 等,而堆是一种可以动态分配和释放的内存,由堆管理器进行管理,用户在程序中使用的内 存分配函数都是通过堆进行分配的。  
0 0