作者:李劲松在科岛每晚包夜 | 来源:互联网 | 2023-09-23 19:32
在将程序键入为高级程序员时,n = 0;
看起来更高效,更干净。
但是n = 0;
真的比if (n != 0) n = 0;
更有效率吗?
-
当n
更有可能是0
时。
-
当n
不太可能是0
时。
-
n
绝对不确定。
语言:C(C90)
编译器:Borland的Turbo C ++
可重复的代码最少
void scanf();
void main()
{
int n; // 2 bytes
n=0; // Expression 1
scanf("%d",&n); // Absolutely uncertain
if(n!=0) n=0; // Expression 2
}
注意:我已经提到了上面的代码,仅供您参考。请不要顺其自然。
如果您对上述语言/标准/编译器不满意,请随时以您喜欢的语言/标准/编译器解释以上3种情况。
如果
是2的补码整数类型或无符号整数类型,那么直接写入n
肯定不会比带有条件检查的版本慢,并且良好的优化编译器将生成相同的代码。一些编译器会在将寄存器值与自身进行XOR运算时将赋值编译为零,这是一条指令。
如果n = 0
是浮点类型,1's补码整数类型或有符号幅度整数类型,则这两个代码段的行为不同。例如。例如,如果n
的符号为负零。 (确认@chqrlie。)同样,如果n
是系统上的指针,但没有多个空指针表示形式,则当n
是以下之一时,if (n != 0) n = 0;
将不会分配n
各种 null指针。 n
赋予了不同的功能。
“将永远更有效率”是不正确的。如果读取n = 0;
的成本较低,而写入n
的成本较高(考虑重新写入需要重写页面的非易失性存储器),并且可能n
,那么n == 0
比n = 0;
慢,效率低。
,
n = 0;
由于没有条件检查,因此始终会更有效率。
https://godbolt.org/z/GEzfcD