我写了一个简单的C++函数来检查编译器优化:
bool f1(bool a, bool b) {
return !a || (a && b);
}
Run Code Online (Sandbox Code Playgroud)
之后我检查了Rust中的等价物:
fn f1(a: bool, b: bool) -> bool {
!a || (a && b)
}
Run Code Online (Sandbox Code Playgroud)
我用godbolt检查汇编器输出.
C++代码的结果(由clang -O3标志编译)如下:
f1(bool, bool): # @f1(bool, bool)
xor dil, 1
or dil, sil
mov eax, edi
ret
Run Code Online (Sandbox Code Playgroud)
Rust等效的结果要长得多:
example::f1:
push rbp
mov rbp, rsp
mov al, sil
mov cl, dil
mov dl, cl
xor dl, -1
test dl, 1
mov byte ptr [rbp - 3], al
mov byte …Run Code Online (Sandbox Code Playgroud)