|
|
1
31
这是一个微观优化(也可能是由编译器处理的)。别担心。通过专注于你的程序实际算法,你会得到更大的回报。
|
|
|
2
7
这实际上是(非常、非常轻微) 高效。变量赋值大致相当于空检查,而且可能还有一个额外的分支。这并没有多大区别。
你明白了。 |
|
|
3
3
我不担心——这只是需要维护的额外代码行。这是一种你永远不应该做的微观优化,除非你有 大量 有文件证明这是你的瓶颈。 |
|
|
4
2
首先,这是微观优化。所以不用太担心。 但要回答你的问题,你需要把它减少到一行。(因为你的代码所做的就是将其设置为NULL)。
原因是, 比较比分配要昂贵得多。(因为比较会相对地消耗许多汇编指令。通常是减法和与零的比较,或者XOR和与零进行比较)。作业占用的指令更少。 |
|
|
5
2
如果你有一个像样的编译器,它们会生成相同的代码。如果你有一个糟糕的编译器,那就是
|
|
|
6
1
如果我看第二个块代码,我会认为你只想在foo变量之前不为null的情况下将其设置为null,如果我看第一个代码,我认为你无论如何都想将变量foo设置为null。
|
|
|
7
1
这将使你的代码更难阅读,即使是优化,也不值得费心。
|
|
|
8
1
这将产生很小或没有影响。我认为你甚至无法创建一个基准来证明这种差异。 事实上,有些人会认为将null赋值根本就是一种代码气味(参见 PMD detector for NullAssignment ):
总的来说,我个人对任何试图鼓励垃圾收集的事情都持怀疑态度(你几乎总是会得到你意想不到的效果)。 |
|
|
George S. · 是否存在基于元组的控制流语句内部表示? 8 年前 |
|
FlatAssembler · 在x86程序集中计算exp(x) 8 年前 |
|
|
cib · 即时编译和动态编译有什么区别? 8 年前 |
|
|
Artemis · 寄存器与指令之间的差异 8 年前 |
|
|
Sam · 了解go工具编译和链接命令 8 年前 |