初始假设:我们将在 argv[1] 不为 NULL 的情况下运行以下程序 1000 次:
#include<stdio.h>
#include<stdlib.h>
int main( int argc, char *argv[] ) {
if ( argv[1] == NULL ) {
printf("Usage: a.out argument1");
exit(1);
}
else if ( argv[1] != NULL ) {
some_cheap_computation;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,上面的代码是否会比以下代码运行得更快:
#include<stdio.h>
#include<stdlib.h>
int main( int argc, char *argv[] ) {
if ( argv[1] == NULL ) {
printf("Usage: a.out argument1");
exit(1);
}
if ( argv[1] != NULL ) {
some_cheap_computation;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经了解到,最快的代码将使用 else代替else if。评估是否else if与if在 C 中评估花费的 CPU 时间一样多?
从字面上看没有区别。编译器会将所有版本优化为相同的代码。可以看出,第二个条件与第一个条件相反。这至少适用于 -O1。使用 -O0,争论性能为零。
请参阅编译版本 1。
请参阅编译版本 2。
两者都生成这个程序集:
.LC0:
.string "Usage: a.out argument1"
main:
mov rax, QWORD PTR [rsi+8]
test rax, rax
je .L6
movsx eax, BYTE PTR [rax]
add eax, 1
ret
.L6:
sub rsp, 8
mov edi, OFFSET FLAT:.LC0
call printf
mov edi, 1
call exit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |