描述 Windows 操作系统内存管理的方法
2015-07-18 12:43
197 查看
(1)有三种方法:虚拟内存,内存映射文件,内存堆栈。 虚拟内存是将页文件加载到内存,适用于比较大的对象或结构; 内存映射文件是将磁盘上文件加载到内存,适用于大文件和单机的进程间内存共享; 堆栈就是动态的分配内存,适用于小对象的创建。 这些在windows核心编程中都描述得很详细的。 (2)当进程要读自己的虚拟地址空间中的数据时:
代码的位置必须在物理内存中才能被运行,由于现在的操作系统中有非常多的程序运行着,内存中不能够完全放下,所以引出了虚拟内存的概念。把哪些不常用的程序片断就放入虚拟内存,当需要用到它的时候在load入主存(物理内存)中。这个就是内存管理所要做的事。内存管理还有另外一件事需要做:计算程序片段在主存中的物理位置,以便CPU调度。 内存管理有块式管理,页式管理,锻式和锻页式管理。现在常用事锻页式管理 块式管理:把主存分为一大块、一大块的,当所需的程序片断不在主存时就分配一块主存空间,把程 序片断load入主存,就算所需的程序片度只有几个字节也只能把这一块分配给它。这样会造成很大的浪费,平均浪费了50%的内存空间,但时易于管理。 页式管理:把主存分为一页一页的,每一页的空间要比一块一块的空间小很多,显然这种方法的空间利用率要比块式管理高很多。 段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很多,这种方法在空间利用率上又比页式管理高很多,但是也有另外一个缺点。一个程序片断可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上(计算机最耗时间的大家都知道是I/O吧)。 锻页式管理:结合了段式管理和页式管理的优点。把主存分为若干页,每一页又分为若干段。好处就很明显,不用我多说了吧。 各种内存管理都有它自己的方法来计算出程序片断在主存中的物理地址,其实都很相似。 |
相关文章推荐
- 在CentOS 6.3/6.5 64bit上为python 2.7.10安装pycurl模块
- nyoj259 茵茵的第一课
- VMware Workstation 虚拟机设置连接U盘
- SQL Server 2008 数据库同步的两种方式 (发布、订阅)
- 使用headview后listview的item的Position问题
- 网页前端 网页换肤(js)
- 6月拍牌记
- iOS客户端开发流程
- TOKUDB参数一
- Android Material Design之Toolbar与Palette实践
- 通过SQL Server 2008数据库复制实现数据库同步备份
- BZOJ 1324 Exca 神剑 最小割
- c# XML和实体类之间相互转换(序列化和反序列化)
- [Effective Java]第七章 方法
- IDEA更换主题
- SQL Server 2008 R2数据库镜像部署图文教程
- Jenkins build失败条件
- C和指针第九章课后习题编程练习
- 了解浏览器如何工作—渲染引擎
- 输入/输出系统