0

例如:

...一些代码

int sizeOfSomeObject = someObject.length();

...一些代码,不再需要 sizeOfSomeObject

现在我需要其他 int 变量来执行其他操作(例如,用于某个对象中的位置),我遇到了两难境地:为此创建一个新变量或使用 sizeOfSomeObject。在第一种情况下,我将保持可读性,但会失去性能。在第二种情况下 - 相反。程序员在这种情况下通常会做什么?

4

5 回答 5

4

在第一种情况下,我将保持可读性,但会失去性能。在第二种情况下 - 相反。

那么你对它进行了基准测试吗?我怀疑不,你没有。大多数现代编译器在寄存器分配期间会进行大量分析,因此如果优化器感知到有一个不再使用的变量,但是有一个相同类型的新变量,它会将这两个变量合并到同一个内存区域或处理器寄存器。无需担心性能损失。


无论如何,不​​要做过早的优化(这是)。在 90% 的情况下,可读性比“性能”更重要。

总而言之,继续创建一个具有适当的、不同的描述性名称的新变量。只是为了好玩,编译这个版本和你使用相同变量名的版本,并查看生成的程序集(或字节码,或......) - 并发现它们是相同的。

于 2013-05-11T15:19:14.810 回答
1

我会为不同的事情使用不同的命名变量。

就这样的事情而言,我不认为只有一个变量会导致巨大的性能损失。在大多数语言中,您可以选择在不再使用时以某种方式从内存中清除变量,因此我建议您这样做,以便代码在以后阅读时对您或其他人有意义。

于 2013-05-11T15:18:45.943 回答
1

在 C++ 中,您可以使用块来销毁不再需要的对象:

void some_function () {
   {
      MyClass c;
      // ... here we use c ...
   }
   // now c has been destroyed
   {
      MyClass d;
      // ... here we use d ...
   }
   // now d has been destroyed
}

在您的示例中(带有int变量),没有理由担心performance。可能发生的最糟糕的事情是使用两个变量而不是一个变量的内存,但是 (i) 这可以忽略不计,并且 (ii)int无论如何,它可能会存在于 CPU 寄存器中。如果您真的担心,请在示例中使用块方法int

于 2013-05-11T15:25:19.533 回答
0

体面的编译器会优化你的第二个变量,所以这不应该是一个问题。

也就是说,在某些情况下变量重用是有意义的。例如,您可能有一些变量保存从调用某些外部 API 填充的通用输出。根据传递给 API 的上下文和参数,您将以不同的方式处理数据,但重用相同的数据变量可能会更好(更具可读性等)。

例如,像这样:

void* data = getSomeData(params);
//process data
//change params
data = getSomeData(params);
//process data
//change params
data = getSomeData(params);
于 2013-05-11T15:24:03.590 回答
0

这取决于初始化这种 int 的频率。如果它不在一些非常嵌套的 for 循环中,大多数(所有)程序员都会选择第一个。此外,大多数现代编程语言都有一个垃圾收集器,可以清理剩余的对象。

于 2013-05-11T15:18:45.050 回答