21
回答
每个字节都有唯一的地址,这个地址到底是什么,又存在哪里?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

大家好。

我在看C语言的书,有一句是这样的:“内存为16MB的机器拥有16777216个字节。每个字节都有唯一的地址。”。

我又想起我读大学那会遗留到现在的一个问题。这个“地址”到底是个什么东西,还是只是一个概念而已,实际是不存在这个东西的。而如果“地址”是一个东西,那么它是被存在哪里的?


@中山野鬼


谢谢

<无标签>
举报
翟志军
发帖于3年前 21回/2K+阅
共有21个答案 最后回答: 3年前
天上有很多星星,每个星星都有自己的位置,我们可以说位置这个概念“存在”,但这些位置信息没有存(放)在任何地方。我们思考它,它就在大脑(CPU)里;我们讨论它,它就在声波(总线)里;我们计算它,它就在草纸(内存)里;我们记录它,它就在书本(硬盘)里。
--- 共有 1 条评论 ---
翟志军awesome 3年前 回复

地址就是程序在访问内存的时候,需要告诉CPU的一段数据,这些数据在程序中是实际存在的。

至于你说地址是不是真实的,这个不好回答。你说感情是不是真实的?虽然摸不着,但能感受到,甚至能利用并作用到人身上。

地址也是一样,是CPU提供的一个功能,使得程序可以通过这个“规则”访问内存。但是拆开电脑并不能摸到地址这个东西。

再精炼点说,就是内存地址是CPU提供的一个抽象的概念,这个概念最直接的体现就是在汇编层面。

至于CPU为什么要抽象出这样一个东西,这不是定理公理,而是人为设计的,是冯诺伊曼体系的实现。

--- 共有 2 条评论 ---
陈阳阳阳回复 @翟志军 : 通过某种手段你也可以自己控制。 3年前 回复
翟志军意思是地址这个东西,实际上是我们在写代码时,是不知道,我们的程序真正控制哪个地址,而运行时,就由操作系统决定你的程序工作在哪个地址上? 总的一句话:我们程序控制的是相对地址,而真正的地址是由操作系统分配的?嵌入式可能除外吧。 请问我这样理解是否正确? 3年前 回复
你这里理解死板了,内存约定从0开始到最高位,记得内核程序等都是在最高位分配空间的?这个地址他说的是物理地址吧?一般CPU寻址是虚拟地址,(除了高速cache命中),虚拟页表对应的那一大块区域你可以看作在硬盘上,它通过页表把虚拟地址翻译为物理地址,然后看相应对应的物理地址是否缓存在内存中,如果没有就要调入了,相应的有页替换页淘汰等算法来由操作系统进行换入换出。推荐《深入理解计算机系统》
地址当然存在。哈。地址,简单点说人话,就是门牌好吗。稍微专业点说,你复习下38译码器,如何保证从多个不同源与总线对接。哈。
--- 共有 2 条评论 ---
中山野鬼回复 @翟志军 : 哈,我不是说了嘛,去看下38译码器。。 3年前 回复
翟志军如果把地址比喻是门牌号,那么,挂门牌号的地方存在吗? 3年前 回复

存在的,内存也是一种存储媒介,数据是真实存在在内存芯片里的,是物理的

为了方便CPU能快速找到这些数据,就产生了地址编码,每一个数据都有一个地址与之对应,是人为抽象的

一看就是汇编没学好的  看看汇编吧 比问谁都强
--- 共有 1 条评论 ---
翟志军谢谢。我现在的主线是C,汇编还没到时候。所以就想直接问下懂的人,希望能给我一句话的解释。 3年前 回复
你的疑点是字节有地址 那地址存在哪里? 告诉你 地址只是个名词代号  不是实际空间   这个你搜索下“CPU寻址”就明白了  
地址就是地址,类似于门牌号,这个并不存储在哪,只是用到的时候,由CPU寄存器作用到地址总线,再到内存,然后在从数据总线中得到相应的数据。这个学点硬件知识,很容易就了解怎么回事了。
顶部