内存地址与内存空间
Posted lanht
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存地址与内存空间相关的知识,希望对你有一定的参考价值。
概览
- 基本概念
- 进入误区
- 误区诊断
- 总结
基本概念
- 什么是位?
- 什么是字节?
位表示的是二进制位,一般称为比特,即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;
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字节,跟内存地址位数无关;
内存空间大小就是寻址能力,即能访问到多少个地址
以上是关于内存地址与内存空间的主要内容,如果未能解决你的问题,请参考以下文章