#performance #if-statement #logic #operator-keyword #logical-operators
#Производительность #if-оператор #Логические #оператор-ключевое слово #логические операторы
Вопрос:
В чем разница между вложенным if (условием) и логическим оператором с точки зрения производительности и логики.
if(a amp;amp; b amp;amp; c){
//do something
}
if(a){
if(b){
if(c){
//do something
}
}
}
Одинаковы ли приведенные выше коды по логике?
Моя главная забота — производительность кода, что с точки зрения производительности лучше всего использовать?
Ответ №1:
Если вы попытаетесь преобразовать эти два кода в assembly
язык (который очень близок к машинному языку), оба кода будут преобразованы точно так же (первый код, второй код):
C:
void Main(){
int a=1, b=2, c= 3, res = 0;
if(a amp;amp; b amp;amp; c)
res = 100;
}
// or
void Main(){
int a=1, b=2, c= 3, res = 0;
if(a)
if(b)
if(c)
res = 100;
}
Вывод сборки:
Main():
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
mov DWORD PTR [rbp-8], 2
mov DWORD PTR [rbp-12], 3
mov DWORD PTR [rbp-16], 0
cmp DWORD PTR [rbp-4], 0
je .L3 ; jump to the end if `a` is not true
cmp DWORD PTR [rbp-8], 0
je .L3 ; jump to the end if `b` is not true
cmp DWORD PTR [rbp-12], 0
je .L3 ; jump to the end if `c` is not true
mov DWORD PTR [rbp-16], 100 ; otherwise do something
.L3:
nop
pop rbp
ret