内存地址是存在哪里的?

发布于 2022-09-04 18:48:21 字数 385 浏览 15 评论 0

内存是用来存数据的,它有地址,地址是一个16进制的数,每个地址可以存1个字节的数据。
问题:
1、这个16进制的地址是谁给它的,是操作系统给它的,还是生产的时候给它写进去的?
2、这个地址存储在什么地方,是存储在一个什么芯片里面吗?
3、内存是怎么存储一个变量的,比如string a=‘hello’;一般听到的就是开辟了一块内存空间,把hello存进去,完了。不太明白的是,这个语句一共有6个元素:

1、string
2、a
3、=
4、‘’
5、hello
6、;

hello存到内存了,那其他5个元素也肯定存到内存了,他们存到内存后怎么关联起来呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

鸠书 2022-09-11 18:48:21

编译原理

少年,我看你骨骼惊奇,是个学CS的料,这本编译原理链接就送给你了。

拥醉 2022-09-11 18:48:21

不存在其它 5 个元素。这是源代码,只存在于你的文本编辑器里面,确切的说是你的硬盘里,当编译器把源码编译为目标代码时,这些就已经不存在了。

心作怪 2022-09-11 18:48:21

你这个问题包括了编译原理数字电路.

我不太懂编译原理,但是数字电路还是懂点.

一般语言里字符串类型在内存中都是连着放的,记录开始和结束地址.

那么这些字符串其实是存在电路中的,电路中只能存0和1,0是低电平,理解成不通电,1是高电平,理解成通电.你所说的16位地址也就是16个01的组合.当cpu要访问这个地址的时候,会给内存的16个引脚以上的地址,内存芯片会在引脚中输出你要访问的字符编码.

感情洁癖 2022-09-11 18:48:21

cpu有个东东叫寄存器,地址都存放在那
如 32位的CPU可以代表4G(2的32次方)的地址,当程序变量寻址就会通过该寄存器找到地址。去看csapp吧,系统帮你回答你想知道的事。

小ぇ时光︴ 2022-09-11 18:48:21

1、编译时先有一个语法分析的过程,把各个关键词、语句的逻辑关系理清楚放进一个树结构里,这时就不需要:冒号,分号,括号,空格这些东西了:

1、string
2、a
3、=
4、"
5、hello
6、; --------【扑街】

2、引号 " 使编译器知道这是字符串,于是编译器把 "" 里面的 hello 转化为对应的数字编码:6800 6500 6C00 6C00 6F00,这时不再需要引号:

1、string
2、a
3、=
4、" ------ 【扑街】
5、hello --【变性】
6、;--------【扑街】

3、string 变成一个二进制命令,作用是在内存上划出一块符合 string 长度的块,并把该块的<起始地址、终止地址、数据长度>存到寄存器里。现在电脑可以通过地址来识别这个变量,通过长度来读取数据,所以就不需要变量名 a 和类型名 string 了。

1、string--【扑街】
2、a-------【扑街】
3、=
4、" ------ 【扑街】
5、hello --【变性】
6、;--------【扑街】

4、等号 = 变成一个二进制命令,按寄存器的数据找到对应的内存块,并根据语法关系把 hello 的编码写进该块内存。

【全体阵亡】

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文