一个内存概念问题
80386的地址总线宽度为32位 所以内存地址空间为2^32个内存单元 得出的结论是4gb
我有个疑问,内存地址空间大小的计算为 2^地址空间宽度*2^数据总线宽度 我这样理解对么? 内存
[解决办法]
地址空间就是2^地址总线数,后面的没用。4GB指的是在内存单元为1字节的情况下,使用32位的地址总线可以寻址4GB的内存。这里还有个可寻址的问题,可能在大多数CPU上,可寻址的最小单元都是字节,而地址总线就是用来标识这些可寻址的单元的。某些单片机上可以按位寻址,不说这个了,我也不怎么明白。一般汇编语言的教材都会讲这个。
给你举几个例子:
(下面这段并不是代码,使用代码的形式只是为了能够使用等宽字体,如果直接弄的话格式就乱了)
假设某个CPU只有两位地址总线,那么它的地址空间是4。
如果这个CPU能够寻址的最小单元是字节,那么它可以寻址的内存的大小是4 Byte,这样:
(假如内存里面全是二进制的1)
地址: 0 1 2 3
内容: 11111111 11111111 11111111 11111111
如果这个CPU能够寻址的最小单元是一个4位的单元,那么它可以寻址的内存大小是2 Byte,这样:
(假如内存里面全是二进制的1)
地址: 0 1 2 3
内容: 1111 1111 1111 1111
需要注意的是Byte这个单位在任何时候都表示8位。
另外CPU一次不是只能读取1个字节或者4位。以一般的台式机的CPU为例,
它至少可以一次读写1个字节,2个字节,4个字节或者8个字节(64位CPU),
其他的我就不知道了。举几个例子:
假设某个CPU只有两位地址总线,能够寻址的单元有1字节和2字节。
地址: 0 1 2 3
内容: 11111111 11111111 11111111 11111111
假如我要读取地址为1的那个字节的数据,我可以使用特定的指令来完成这个操作。
假如我要读取地址为2的两个字(就是2个字节)的数据,
我可以使用另外不同的指令来完成这个操作。
指令的格式你没要必要了解,除非你非常像了解这个或者你就是研究这个的。
如果用汇编语言里表示的话,两个操作可以分别用类似这种方法来实现:
mov al,[1]
mov ax,[2]
如果用C++语言来表示的话,是类似这样的:
char a;
word b;C++里其实没有这个类型,假设这个类型占两个字节的空间。
cout << a;
cout << b;
我举的这两个汇编语言和C++语言的例子相当操蛋,不是特别精确,你看看就行了,别往心里去。