Windows下的内存是如何管理
2015-10-13 13:12
176 查看
Windows提供了3种方法来进行内存管理:
1)虚拟内存,最适合用来管理大型对象或者结构数组
2)内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据
3)内存堆栈,最适合用来管理大量的小对象。
Windows操纵内存可以分两个层面:
- 物理内存
- 虚拟内存
其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的
对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址
提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。
释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。
如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常
操作系统的内容分为几块吗?什么叫做虚拟内存?他和主存的关系如何?内存管理属于操作系统的内容吗?
操作系统的主要组成部分:进程和线程的管理,存储管理,设备管理,文件管理
虚拟内存是一些系统页文件,存放在磁盘上,每个系统页文件大小为4K,物理内存也被分页,每个页大小也为4K,这样虚拟页文件和物理内存页就可以对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间
页文件就是内存页,物理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理页+虚拟页就是系统所有使用的页文件的总和
1)虚拟内存,最适合用来管理大型对象或者结构数组
2)内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据
3)内存堆栈,最适合用来管理大量的小对象。
Windows操纵内存可以分两个层面:
- 物理内存
- 虚拟内存
其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G地址空间,而内存分配是通过堆进行的
对于每个进程都有自己的默认堆,当一个堆创建后,就通过虚拟内存操作保留了相应大小的地址块(不占有实际的内存,系统消耗很小)。当在堆上分配一块内存时,系统在堆的地址表里找到一个空闲块(如果找不到,且堆创建属性是可扩充的,则扩充堆大小),为这个空闲块所包含的所有内存页提交物理对象(在物理内存上或硬盘的交换文件上),这时就可以访问这部分地址
提交时,系统将对所有进程的内存统一调配,如果物理内存不够,系统试图把一部分进程暂时不访问的页放入交换文件,以腾出部分物理内存。
释放内存时,只在堆中将所在的页解除提交(相应的物理对象被解除),继续保留地址空间。
如果要知道某个地址是否被占用/可不可以访问,只要查询此地址的虚拟内存状态即可。如果是提交,则可以访问。如果仅仅保留,或没保留,则产生一个软件异常。此外,有些内存页可以设置各种属性。如果是只读,向内存写也会产生软件异常
操作系统的内容分为几块吗?什么叫做虚拟内存?他和主存的关系如何?内存管理属于操作系统的内容吗?
操作系统的主要组成部分:进程和线程的管理,存储管理,设备管理,文件管理
虚拟内存是一些系统页文件,存放在磁盘上,每个系统页文件大小为4K,物理内存也被分页,每个页大小也为4K,这样虚拟页文件和物理内存页就可以对应,实际上虚拟内存就是用于物理内存的临时存放的磁盘空间
页文件就是内存页,物理内存中每页叫物理页,磁盘上的页文件叫虚拟页,物理页+虚拟页就是系统所有使用的页文件的总和
相关文章推荐
- c#注册表操作类
- 自定义有序广播并接受信息
- android手机两种方式获取IP地址
- C语言:编这样一个程序,用户输入10个整数,程序找出其中的最大值和最小值
- Success Is Always Measured in Business Value
- WWDC 2015 - 揭开AutoLayout的神秘面纱(Mysteries Of Auto Layout) Part2
- maven 安装和使用
- web图表库百度开源:ECharts
- 一路走来遇到的难点
- C#通过流写入一行数据到文件
- 《Learning From Data》第一章(一)
- ORA-30482: DISTINCT 选项在此函数中禁用的解决方法
- 用ATL编写Windows服务
- php抓取数据遇到Transfer-Encoding chunked
- MYSQL让别人远程访问自己的数据库
- Cannot proceed with delivery: an existing transporter instance is currently uploading this package
- C#使用HtmlAgilityPack抓取糗事百科内容实例
- strong,weak,copy,retain和assign的区别
- Swift的基本类型和流程控制
- C语言:编写猜数字游戏,猜一个数字,一直到猜中为止