例如:
...一些代码
int sizeOfSomeObject = someObject.length();
...一些代码,不再需要 sizeOfSomeObject
现在我需要其他 int 变量来执行其他操作(例如,用于某个对象中的位置),我遇到了两难境地:为此创建一个新变量或使用 sizeOfSomeObject。在第一种情况下,我将保持可读性,但会失去性能。在第二种情况下 - 相反。程序员在这种情况下通常会做什么?
例如:
...一些代码
int sizeOfSomeObject = someObject.length();
...一些代码,不再需要 sizeOfSomeObject
现在我需要其他 int 变量来执行其他操作(例如,用于某个对象中的位置),我遇到了两难境地:为此创建一个新变量或使用 sizeOfSomeObject。在第一种情况下,我将保持可读性,但会失去性能。在第二种情况下 - 相反。程序员在这种情况下通常会做什么?
在第一种情况下,我将保持可读性,但会失去性能。在第二种情况下 - 相反。
那么你对它进行了基准测试吗?我怀疑不,你没有。大多数现代编译器在寄存器分配期间会进行大量分析,因此如果优化器感知到有一个不再使用的变量,但是有一个相同类型的新变量,它会将这两个变量合并到同一个内存区域或处理器寄存器。无需担心性能损失。
无论如何,不要做过早的优化(这是)。在 90% 的情况下,可读性比“性能”更重要。
总而言之,继续创建一个具有适当的、不同的描述性名称的新变量。只是为了好玩,编译这个版本和你使用相同变量名的版本,并查看生成的程序集(或字节码,或......) - 并发现它们是相同的。
我会为不同的事情使用不同的命名变量。
就这样的事情而言,我不认为只有一个变量会导致巨大的性能损失。在大多数语言中,您可以选择在不再使用时以某种方式从内存中清除变量,因此我建议您这样做,以便代码在以后阅读时对您或其他人有意义。
在 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
。
体面的编译器会优化你的第二个变量,所以这不应该是一个问题。
也就是说,在某些情况下变量重用是有意义的。例如,您可能有一些变量保存从调用某些外部 API 填充的通用输出。根据传递给 API 的上下文和参数,您将以不同的方式处理数据,但重用相同的数据变量可能会更好(更具可读性等)。
例如,像这样:
void* data = getSomeData(params);
//process data
//change params
data = getSomeData(params);
//process data
//change params
data = getSomeData(params);
这取决于初始化这种 int 的频率。如果它不在一些非常嵌套的 for 循环中,大多数(所有)程序员都会选择第一个。此外,大多数现代编程语言都有一个垃圾收集器,可以清理剩余的对象。