我想知道为在小范围内多次访问的值创建临时变量是否有任何重大缺点。
例如:
filep->waypt[rp->leg[j]].ID
或
(*(filep->route + filep->nroutes - 1))->number
这些是来自最近一个项目的示例,在该项目中,我强制自己避免对变量引用进行几乎任何简化,以提高我使用 C 指针的技能(这很痛苦)。然而,这个习惯似乎一直存在。我发现,我越是尝试引入变量来简化代码(可读性和输入量),就越难以准确记住每个新变量引用的内容。
我只在教育环境中审查过我的代码,我想知道其他人认为哪些内容更容易理解以及性能权衡在哪里(如果有)。
什么时候分配一个值的内存地址需要多次算术运算来计算它自己的变量开始导致性能问题?如果循环执行一次会有什么不同吗?嵌套循环中的一次怎么样?在循环中分配给它自己的变量但随后在内部循环中访问的值怎么样?
这在解释语言中会发生什么变化? 用 PHP 说(请原谅语法错误,我是 PHP 新手):
$employees[$i][$phone]['Home']['number'];
对比
$home = $employees[$i][$phone]['Home']['number'];
最后,如果它不是太主观(代码可读性不应该是!),这被认为是编写可读代码的最佳实践?我编写尽可能自记录的代码,但如果变量开始变得过于做作并且被多次引用,我将为它们分配自己的变量。然而,这对我有用的原因可能是我已经习惯了自己的风格。
最佳答案
任何像样的编译器都很有可能检测到常见的子表达式并为您优化它们。
但是,如果临时变量可以提高代码的可读性,我仍然会选择它,尽管它引入了额外的存储空间(尽管很小)。
我认为代码的可维护性比微小的存储占用更重要。通过(人为的)示例,我可能会替换很多:
item[last_item-1].id = 14860;
item[last_item-1].name.first = "pax";
item[last_item-1].name.last = "diablo";
调用:
tItem lastItem = &(item[last_item-1]);
lastItem->id = 14860;
: : :
// and so on.
关于解释语言,我的信息较少。我对如何优化汇编代码了解很多(尽管远不及编写编译器的半神,这就是为什么我通常把它留给他们)。我对大多数解释器中运行的虚拟机了解较少。
但我仍然会编写代码以提高可读性。我不希望看到大量 $employees[$i][$phone]['Home']['number']
片段卡在我的代码中。我宁愿添加
$homePhone = $employees[$i][$phone]['Home']['number'];
在某个地方,从那时起就使用 $homePhone
。
关于optimization - 创建临时变量以增强可读性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3411803/