请教一个很基础的变量内存分配问题

2021-08-01 18:26:29 +08:00
 yezheyu

我声明一个整型变量 a = 10

会在栈空间开辟一块内存来存 10 这个值,假设地址是 0x002

这也就意味着变量 a 的值的地址是 0x002,那么我想问下变量 a 本身存在哪?

程序是怎么知道 0x002 这个地址在命名空间中叫 a,总该有个地方存 a 吧?

是在栈区起始位置以类似 a:0x002 这种把变量名和其值的地址放在一起存起来吗?还是其它什么机制?

最近看了很多博客,都没提到这点,有老哥帮忙解释下吗?

4092 次点击
所在节点    程序员
44 条回复
monstervivi
2021-08-02 18:20:00 +08:00
推荐你看一下 CSAPP 的第三章,看完你就懂啦
ryd994
2021-08-02 23:10:38 +08:00
编译原理是一方面。另一方面你可以学一下汇编。写过一个小汇编程序的话你就知道自己的程序编译后是什么样子的了。
进阶还可以看看自己写的程序的反编译。然后发现编译器这都什么怪物?优化的比我写的汇编好多了
rpman
2021-08-03 11:53:23 +08:00
学编译原理大可不必,学下汇编就懂了
amok
2021-08-03 17:33:04 +08:00
变量的值存在栈帧的局部变量表里,类似数组的形式。编译后的字节码指令,并不存在变量名 a,只是通过索引对变量表的值进行操作。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/793017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX