内存地址与内存空间

概览

  1. 基本概念
  2. 进入误区
  3. 误区诊断
  4. 总结

基本概念

  • 什么是位?    
  • 什么是字节?

    位表示的是二进制位,一般称为比特,即0或1,是计算机存储的最小单位;

    字节是计算机中数据处理的基本单位;

    计算机中以字节为单位存储和解 释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特。

                      1Byte=8bit

  • 地址总线?

  

  (1)CPU是通过地址总线来指定存储单元的。

  (2)地址总线决定了cpu所能访问的最大内存空间的大小。

  (3)地址总线是地址线数量之和。

  • 内存地址?

    是一种用于软件及硬件等不同层级中的数据概念,用来访问电脑主存中的数据。

        

    内存地址只是一个编号,代表一个内存空间

  • 寻址空间

    寻址空间一般指的是CPU对于内存寻址的能力。通俗地说,就是能最多用到多少内存的一个问题。数据在存储器(RAM)中存放是有规律的 ,CPU在运算的时候需要把数据提取出来就需要知道数据存放在哪里 ,这时候就需要挨家挨户的找,这就叫做寻址,但如果地址太多超出了CPU的能力范围,CPU就无法找到数据了。 CPU最大能查找多大范围的地址叫做寻址能力 ,CPU的寻址能力以字节为单位 ,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位的CPU最大能搭配4G内存的原因 ,再多的话CPU就找不到了。

误区时刻

   前方高能,请谨慎驾驶!接下来进入“误区时刻”,什么鬼?

  

  不着急,我们慢慢往下看,跟着我的思路,落入我的陷阱!哈哈....

      

   按照上图,8位的cpu地址总线的宽度是8,即8位占1字节;16位cpu地址总线的宽度为20(cpu内部有个加法计算器,将16位宽度通过加法计算器加到20位),即16位占2字节;32位的cpu地址总线宽度为32,即32位占4字节。有没有问题???好,没有问题我们继续!

  地址总线宽度为8,可以表示多少个地址呢?2^8=256个,这么多地址那么所占内存为256 * 1(所占字节)= 256Byte;对不对?好,继续;

  地址总线宽度为20,可以表示多少地址呢?2^20=65536个,这么多地址所占内存为65536 * 2(所占字节) = 2M;

  地址总线宽度为32,可以表示多少地址呢?2^32=65536个,这么多地址所占内存为65536 * 4(所占字节) = 16G; 
  
  有没有问题?好,我们看下官方的数据;

    Intel公司早期的CPU产品的地址总线和地址寄存器的宽度为20位,即CPU的寻址能力为2^20=1024*1024字节=1024K字节=1M字节;286的地址总线和地址寄存器的宽度为24位,CPU的寻址能力为2^24=1024*4*1024*4B=4*1024*4KB=16M;386及386以上的地址总线和地址寄存器的宽度为32位,CPU的寻址能力为2^32=4096M字节=4G字节。

  是不是要上天?16G的内存!!!

  

  哪里的问题?

  接下来,我们来找找误区。

 误区诊断

  来看看开头基本概念这里【内存地址只是一个编号,代表一个内存空间】。什么意思?

  我们这块内存空间存储的是什么?是这个编号吗?

  显然不是,而是这个编号代表这块空间,这款空间会随编号的位数改变吗?变成2个字节,4个字节?大错特错!一个内存地址所代表的永远是1个字节,内存的每一个字节都有为一个个编号,16位,32位只是这个编号的长短,不会影响内存的最小单元大小,仅仅是个编号。唯一影响的是所能表示的个数。

  所以这个16位的cpu,所有表示的地址个数是2^20 = 1048576个,一个地址所指大小1个字节 ,也就是1M;

  32位的cpu,所有表示的地址个数是2^32 = 4294967296个,一个地址所指大小1个字节 ,也就是4G;

 

总结

  内存地址只是一个编号,代表一个内存空间;

  内存地址所执行的内存单元大小就是1字节,跟内存地址位数无关;

  内存空间大小就是寻址能力,即能访问到多少个地址

猜你喜欢

转载自www.cnblogs.com/Lanht/p/10780364.html
今日推荐