Performance 在方法中返回变量之前立即命名变量是否有害?

Performance 在方法中返回变量之前立即命名变量是否有害?,performance,variables,compiler-construction,declaration,naming,Performance,Variables,Compiler Construction,Declaration,Naming,这是一个与具有垃圾收集功能的语言相关的问题: 例1: public int CalculateSomething() { //otherstuff int something = CalculateIt(); return something; } 与示例2相比: public int CalculateSomething() { //otherstuff return CalculateIt(); } 我想命名该变量,以便在调试器模式下更容易地

这是一个与具有垃圾收集功能的语言相关的问题: 例1:

public int CalculateSomething()
{
     //otherstuff
     int something = CalculateIt();
     return something;
}
与示例2相比:

public int CalculateSomething()
{
    //otherstuff
    return CalculateIt();
}
我想命名该变量,以便在调试器模式下更容易地查看它,但一位同事提到,创建一个寿命较短的变量可能不明智。但我想编译器就是这么做的


不管怎样,问题是:第一种方式(例如1)是否会对垃圾收集/性能造成不利影响?我使用C++,但实际上好奇java和C++在同一种情况下的行为。

优化,这对于编译器来说应该是一个简单的例子。
更强大的是,根据“otherstuff”的复杂性,整个方法有可能被内联。

您的朋友可能会混淆这样一个事实,即对于一些带有变量的垃圾收集器来说,短生命对象可能很困难。对于GC来说,变量出现问题的唯一方法是,如果变量实际上是长期存在的,并且引用对象的时间比您实际需要的时间长(这意味着GC不会尽快收集它)。另外:如果所讨论的代码实际上是关于
int
s的(并且您并不是为了简化示例而更改它),那么GC与此完全无关。整数是值类型,因此不会被垃圾收集。@sepp2k
int
在其表示中不是通用的。当这个人正在编写编译器时,也许你应该用目标类型系统的行为来限定堆栈/寄存器和对象。这没关系,抖动优化器没有问题再次删除它。这个返回值是通过处理器寄存器返回的,优化器的主要功能之一是用寄存器替换局部变量。可以随意使用这种风格,它可以使代码更容易调试。C++的工作原理是一样的。对Java不是很确定,但热点抖动应该开始关注它。@FrankC。OP显然不是在编写编译器,这个问题是错误的(尽管我不太确定如何从标记描述中自由地解释短语“详细的内部工作”)。我说的是C#,因为OP说他们使用的是C语言(尽管Java也是如此)。@sepp2k公平地说,这个问题有点含糊不清,非常广泛,这不取决于这是否是一种新语言以及后端策略是什么吗?如果它有一个后端,比如说LLVM,那么你肯定会很成功。任何远程注册着色和可注册变量的简单概念都可以。但即使是现在还没有这样做的编译器,从长远来看也肯定会努力实现这样的模型,不管后端策略如何。关于LLVM:我不是一个真正的超级粉丝。与21世纪初海湾合作委员会(GCC)对统治地位的看法相同,也存在同样的缺陷;卓越理财前端的需求使得替代前端的持续追赶比长期效益更糟糕。我猜最终LLVM将只是一个C/C++编译器和一些将1:1映射到这些语言的前端。