zoukankan      html  css  js  c++  java
  • 为什么在保护模式下IA-32处理器最高可访问4GB的内存

    在保护模式下,IA-32处理器可访问最高达4GB的内存,这是32位无符号二进制整数地址能够寻址的上限。
     今天看汇编的时候发现书里带过一句,不太明白为什么内存上限是4GB,就搜了一下,总结了一下答案。
     
    1. 对计算机来说一个存储单元大小是8 bits (1字节);
     
    2. 每一个存储单元都要对应一个地址,地址不管里面的内容是什么,如一个int类型是16 bits,占用2个存储单元,第一个存储单元的地址假设为 FFFFFFF1 (32bits),则第二个存储单元的地址就为FFFFFFF2。而字符串或者数组的话占用连续的内存空间;
     
    3. CPU里有很多寄存器,有储存指令的指令寄存器,有储存数据的数据寄存器,有储存地址的地址寄存器,还有既可以储存数据又可以储存地址的通用寄存器等等。寄存器的作用是储存CPU的运算器所需要的或生成的数据的。
     
    4. IA-32(Intel Architecture,英特尔体系架构),属于X86体系结构的32位版本,即具有32位内存地址和32位数据操作数的处理器体系结构,从1985年面世的80386直到Pentium 4,都是使用IA-32体系结构的处理器。
     
    5. 系统的32位就是指寄存器的大小,IA-32对应32bits的地址寄存器,即一共有2^32个地址,每个地址对应一个8 bits的存储单元
     
    6. 32bits * 8bits = 4GB内存大小(2^2*2^10*2^10*2^10*1B)
     
    7. 但其实这个问题是错的,32位CPU是可以访问4GB以上内存的,通过一种叫做PAE(物理地址扩展,Physical Address Extension)的技术。Windows之所以不能支持是因为微软的市场策略问题(服务器版的就支持PAE)。
     
    8. 可是,地址不光是给内存用的,但计算机的其他部件也需要地址,所以虽然能编址4GB的空间,但实际用到内存上的只有3.2GB,这也就是为什么4GB内存在Windows上只能使用3.2GB的原因了。
     
    9. 相比之下64位的CPU虽然比32位看起来相差不多,但是内存却可以达到16TB!!不过也并不是这个数字越大越好,单纯内存的提高并不能提高性能,就现在而言性能上可能还是32位CPU更好一些。
  • 相关阅读:
    C++指针
    写的第一个 JavaCript
    VB.NET中实现"关机/休眠/重启/注销"的类
    VB&VB.NET速查表
    把一个数组的值赋给另一个数组(VB.NET)
    设置装备陈列.htaccess的一些问题结果总结
    httpd.conf文件设置装备布置详解2
    httpd.conf文件设置装备安放详解3
    httpd.conf文件设置详解1
    Red Hat下若何架设FTP做事器
  • 原文地址:https://www.cnblogs.com/sparkmorry/p/3426941.html
Copyright © 2011-2022 走看看