关于出栈的疑惑

2020-07-08 09:39:44 +08:00
 linxiaoziruo

假设有一个函数是这样的 void demo(){ int a = 1; int b = 2; int c = 3;

int d = a * b; int e = c* d; }

理论上应该 a 先入栈,其次 b,c ;出栈的时候是 a,b 先出栈(应为先用到他们两),既然 a,b 先出栈,那么 c 肯定也用出栈(删除),那么首次用到 c 对时候,c 从哪儿去取呢(应为已经出栈被删除掉了)?

3683 次点击
所在节点    Java
25 条回复
hhhWhy
2020-07-08 17:08:52 +08:00
@hhhWhy 指针相对地址一般在编译的时候就会生成,只需要读栈顶就能知道变量地址
zsdroid
2020-07-08 17:31:51 +08:00
变量没有栈吧,方法才有栈,方法里的局部变量都属于栈里的一块数据。
zmxnv123
2020-07-08 20:44:20 +08:00
用到 a,b 为什么要 a,b 出栈.
a 的地址大概为 12(%esp)
b 的地址大概为 8(%esp)
linxiaoziruo
2020-07-09 10:22:32 +08:00
Java 为什么用堆来组织内存数据,有什么好处吗,具体对好处对场景是什么?为什么不用平衡树或者链表来组织内存数据?
AlohaV2
2020-07-10 11:28:50 +08:00
@linxiaoziruo 这个堆不是你说的堆。heap memory 不等于 heap

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

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

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

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

© 2021 V2EX