tej*_*oro 9 c c++ performance xor variable-assignment
我意识到差异可以忽略不计,但是在尝试将无符号长度归零时哪个更有效?
unsigned long x;
...
x=0;
--OR--
x^=x;
Run Code Online (Sandbox Code Playgroud)
泰勒
小智 30
如果你要实现编译器,你会怎么做?实际上,你会为两者选择最快的实现.由于两者相同,因此这两种方法的实现速度最快.
换句话说,在公元前5000年之后发布的任何编译器都将为两者生成相同的汇编代码x = 0,x ^= x如果启用优化.这意味着它们同样快速.
这不仅适用于赋值/ xorring,也适用于乘法,以及其他算法.表达您的意图并让编译器对其进行优化.相信我,编译器在优化方面比你更好.
换句话说,写可读代码和使用x = 0;.
哦,顺便说一句,按位xorring一个未初始化的整数本身是未定义的行为,一个好的编译器应该优化整个事情.
Mat*_*son 11
首先,如果没有为变量赋值,那么在技术上"未定义的行为"除了为其赋值之外还要做任何事情.
其次,在过去15到20年间生产的处理器上,与其本身的XOR不太可能更快,因为它需要额外的读取.它可能在很长一段时间内更快(由于是SHORTER CODE),但实际上,我相信即使这是错误的.
编辑:我应该指出,在现代处理器中对寄存器进行异或,使其为零可能仍然更快/更紧凑.但是如果我们假设我们不知道是否x在寄存器中,那么我们也不应该让编译器更复杂地确定我们实际在做什么.
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |