gpt4 book ai didi

c - 分配给变量与立即使用返回值

转载 作者:行者123 更新时间:2023-11-30 15:39:49 25 4
gpt4 key购买 nike

与 test 中对 c 的显式赋值相比,test2 中 add(a,b) 的返回值会发生什么情况?

void test(int a,int b) {
int c=add(a,b);
return incr(c);
}
void test2(int a,int b) {
return incr(add(a,b));
}

大概在字节码的实现中通过引用/值进行分配,即对于 JVM、AVM2 和 Javascript 解释器/JIT 来说理论上是相同的。

大概命名值(变量)和无命名值都是堆栈中上下文位置的隔离指令。即,没有神奇的优化将返回值放入下一条指令。

即,test2 中的 incr 指令仍然会产生 incr 堆栈的第三个值 或类似的结果。

最佳答案

答案是“视情况而定”。关于您正在使用的编译器以及您与编译器一起使用的选项(针对最佳可调试性与最佳性能进行编译)。

在优化模式下,一个像样的现代编译器会意识到变量c仅在return语句中立即使用一次,并且只会将值保留在顶部堆栈,以便可以返回

在 Debug模式下,通常会关闭该优化,并将值分配给名为 c 的实际变量,占用堆栈帧中的一个槽。这使您可以在该行之后暂停并检查该值,以查看在返回执行之前分配给它的内容。它会花费更多的周期,但由于这不是通常用于将代码发送给“客户”或进行性能分析的模式,因此除了编译器/调试器作者之外,通常对任何人都不重要。

关于c - 分配给变量与立即使用返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com