• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

内存映射文件之剖析(一)

发布: 2007-7-01 20:40 | 作者: admin | 来源: | 查看: 31次 | 进入软件测试论坛讨论

领测软件测试网  

内存映射文件之剖析

                                                                              作者:xrbeck

 

内存映射文件(Mapping File)是Windows内存管理中的重要一环,也是编程

技术中比较高级的一个话题。目前关于这方面的资料比较少,而其实内存映射

文件其实对我们的对于Windows的内存了解很重要,在这里把笔者的心得写

出来,和大家一起讨论。

 

                          内存空间及映射

    相信大家都已经知道,在WIN32中和16位Windows的最大不同就是WIN32

引入了面向进程的独立虚拟地址,这个地址的寻址空间达到了4GB(2^32),当然

这个地址是虚拟的。每个进程拥有自己的独立空间,进程A的地址0X10000000

和进程B的地址0X10000000没有丝毫的联系(只是在用户进程地址空间,不包括其他

范围)。说到这个地方可能大家会奇怪了,我的机器中只有64M(或者128M等)内存呀,怎么会有这么大的地址空间呢?而进程A和进程B的同样的地址又会如何识别使得不冲突呢?

   这里先让我们来看看Windows的内存空间(注:这里我们都以Win9X来讨论,

当然Win2K或者WinNT和9X在某些方面会不大一样)

                    

                     0x00000000----0x003FFFFF     4M      属于系统保留区域

 

            0x00400000---0x7FFFFFFF    2G-4M   面向进程独立的地址空间

 

            0x80000000--0xBFFFFFFF     1G       Win32共享的空间,用来存放

                                                  内存映射文件等

         

            0xC0000000---0xFFFFFFFF    1G       用来存放Vxd等

 

有上面的列表可知,用户的程序运行在第二个地址范围中,而我们用来讨论的映射文件则放在了第三个地址范围中.而我们调试程序的时候经常有看到某个指针变量的值

为多少,这个值就指的是虚拟地址空间中的地址.

    那么Windows是如何将这个虚拟地址空间转化为实际的PC上的RAM的地址呢?

这就牵涉到映射的问题,也就是以页(page)为基本单位实现两个地址的对应.这个相信

在操作系统这门课里已经学习过,这里就不再重复了.在上面这个问题中,地址情况

可能如下:

           进程A                   RAM                    进程B

 

 

 

 

0x10000000

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网