Loser_YiMo 发表于 2022-7-25 11:46:21

地址总线,数据总线,求深度解析!

本帖最后由 Loser_YiMo 于 2022-7-25 19:22 编辑

我正在努力思考如何表达我要问的问题,还请各位大佬细阅。

前言
首先,我问的问题可能有些奇怪,因为我现在正在学习C语言,然后遇到一些指针的问题,我觉得在C语言中不能得到很好的解答。
其次,我在两年前学完了汇编语言,尽管属于摸爬滚打,很多东西都不透彻,但指针问题还是让我觉得应该从汇编语言的角度理解。且我也会参杂一些汇编语言的问题。

1.首先,关于地址总线,地址总线的宽度决定了可以表示多少个地址,这个是和内存条挂钩的吗?比如32位的系统,CPU可以寻找2的32次方的byte数据,也就是4GB的数据,但是如果我的内存条是8GB的,怎么找剩下的4GB呢?还是说32位系统的内存条只能利用到4GB.换言之,我地址总线能表示的数据总共就0 ~ 2^32 , 那2^32 + 1地方的数据不就不能表示了吗?

2.地址总线传输的是bit位的数据,但是寻址却是以内存单元(byte)为最小单位,这我大致可以理解,就相当于找文件夹,一个文件夹(byte)里八个文件(bit),但是我好奇的是,这些被存放的数据对应的地址不需要空间存放吗?就好像文件夹里的八个文件表示了我这个byte,但是我这个文件夹放的位置在哪呢?换言之,我一个int在内存中是 01 00 00 00,但计算机是怎么找到他的,肯定要通过他的地址,而他的地址肯定又需要一个地址存放,这样不就无限套娃了?

3.在32位系统中,一个指针(地址)的大小是4byte,32位对应的是数据总线的宽度,一次最多传输4byte的数据,也就是说指针的大小和数据总线的宽度挂钩。但为什么不是和地址总线的宽度挂钩呢?因为他应该取决于能读取到的地址范围啊...

暂时就这些,我现在很乱,所以问的可能很傻,像个纯纯的门外人,但还望有人能尽力解答吧。或许我有很多理解错误,C语言涉及到内存的部分对我来说很多都是片面理解勉强学习了,往指导!

人造人 发表于 2022-7-25 11:46:22

1. 是的,32位的机器就只能访问内存的前4GB,后面不管有多少都无法访问
下面是刚刚安装的window 10 32位版本,虚拟机分配了8192MB内存,在虚拟机中的windows 10 显示物理内存是3584MB


2.
"地址总线传输的是bit位的数据"
此话怎讲?
内存地址是由cpu提供给内存的
在内存中可以保存数据,内存不管你在里面保存的是什么,内存中保存的是什么完全取决于作为程序员的你,你把内存中的某些数据作为地址解释,那这些数据就是地址
例如,你把内存地址0的位置开始的4个字节作为地址来理解,那就是先让cpu发给内存,让读取地址0开始的连续4个字节,cpu收到这4个字节数据后,再把这4个字节发给内存要求读取4个字节,如果这4个字节是 0x00000064,那么cpu就把0x00000064开始的4个字节返回给cpu

3.
"在32位系统中,一个指针(地址)的大小是4byte,32位对应的是数据总线的宽度"
没错,但是同时也是32位对应的是地址总线的宽度,你说对不对?

但为什么不是和地址总线的宽度挂钩呢?
是和地址总线的宽度挂钩,但是地址总线和数据总线一样宽
“指针的大小和数据总线的宽度挂钩”   不是    和数据总线的宽度挂钩

Loser_YiMo 发表于 2022-7-25 19:25:16

人造人 发表于 2022-7-25 14:11
1. 是的,32位的机器就只能访问内存的前4GB,后面不管有多少都无法访问
下面是刚刚安装的window 10 32位版 ...

您看一下,我刚刚在我的贴子里加了一张图,这张图的左边显示的是地址,右边显示的是数据。!!!哦~我好像理解了,您的意思是,在内存中每个数据其实已经编好号了,而这个内存中的东西取决于我放什么进去和怎么读取对不!我之前理解成了存储这些地址也需要空间,而没想到这些地址已经是约定俗成的东西

人造人 发表于 2022-7-25 19:37:27

Loser_YiMo 发表于 2022-7-25 19:25
您看一下,我刚刚在我的贴子里加了一张图,这张图的左边显示的是地址,右边显示的是数据。!!!哦~我好 ...

对,内存中的每一个字节都已经编号了,这个编号就是内存地址
页: [1]
查看完整版本: 地址总线,数据总线,求深度解析!