在windows2000上调试程序时常会遇到"访问地址非法"的提示?我觉得奇怪, windows是怎么判定我访问的地址是非法的呢,在那个位置上没有数据吗? 如果我不修改, 只是想看看都不行吗?windows的内存管理到底是什么机制呢?

解决方案 »

  1.   

    Windows系统定义了一段地址空间为空地址拦截区,位于0-4K的地址空间范围内
    一旦访问该段空间脊背认为访问非法地址
    另外Windows系统运行于保护模式,不只是CPU指令特权控制,对内存的访问也采用了一定的保护措施,如某地址空间为只读访问,某段地址空间不可访问
    对岸性的,对普通京城而言,如程序的指令段为只读内存空间,系统核心空间(位于地址空间的高端大于4G的空间)为不可操作区。
      

  2.   

    谢谢您的解答, 请问如果要看window内存管理方面的书,您能推荐一两本吗?谢谢了.
      

  3.   

    这个与Windows的内存结构管理有关,《Windows核心编程》上有这个的明确表示
    window的GUI程序运行在3环,所有内存都是虚的,共有4G,这个地址有部分是有特殊用处的,而且肯定是不能让用户访问的,所有访问了这些内存肯定就错了,比如上面的同志说得“0-4K的地址空间范围内”,就是WIN9X用来检测NULL指针的。
    在用户可以使用的内存中,如果要使用某一块内存的化,需要向这个内存地址提出“保留”申请才可以使用,如果访问了没有提交申请的内存,访问的内存地址就是非法的了