Hangisi daha hızlı, (bayrak==0) veya (0==bayrak) çalıştırır mı?
1**: Hangisi daha hızlı, if (flag==0)
if (0==flag)
idam edecek? Neden?
CEVAP
Henüz doğru cevap (ve zaten bazı vardır) görmedimuyarı: Navaz kullanıcı tanımlı bindirme işaret yaptı. Ve "en aptal" pek doğru değil gibi görünüyor, çünkü derleyici optimizasyonu ile ilgili güzel bir sohbet:) için oda verir soru . aceleyle dökme benim upvote pişmanım
Cevap:
flag
ne tür?
flag
aslında olduğu durumda kullanıcı tanımlı bir tür. Hangi seçeneği bağlıdır. Tabii ki simetrik değil, ama kesinlikle izin aptalca görünebilir, ve zaten diğer ihlalleri gördüm.
Eğer flag
yerleşik ise, o zaman her ikisi de aynı hızda sürer.
Gelen Wikipedia article x86
, bence bahis için Jxx
talimat if
açıklama: belki de bir JNZ
(Atlama değilse Sıfır) veya bazı eşdeğer.
Derleyici en iyi duruma getirmeleri kapalıyken bile bu kadar bariz bir optimizasyon özlüyor, şüphe ederdim. Bu Peephole Optimization için tasarlanmıştır şeyler yazın.
DÜZENLEME:Tekrar fırladı, bazı derleme (LLVM IR 2.7) ekleyelim
int regular(int c) {
if (c == 0) { return 0; }
return 1;
}
int yoda(int c) {
if (0 == c) { return 0; }
return 1;
}
define i32 @regular(i32 %c) nounwind readnone {
entry:
%not. = icmp ne i32 %c, 0 ; <i1> [#uses=1]
%.0 = zext i1 %not. to i32 ; <i32> [#uses=1]
ret i32 %.0
}
define i32 @yoda(i32 %c) nounwind readnone {
entry:
%not. = icmp ne i32 %c, 0 ; <i1> [#uses=1]
%.0 = zext i1 %not. to i32 ; <i32> [#uses=1]
ret i32 %.0
}
Eğer IR okumayı bilen biri varsa bile, kendini açıklayıcı olduğunu düşünüyorum.
Hangisi daha hızlı: while(1) veya(2)?...
Hangisi daha iyi, dönüş "ModelAnd...
nasıl linker Ekle veya cmake dosyasınd...
Çift.TryParse veya Dönüştürmek.Daha hı...
Daha hızlı olan : (bool) veya(int)?...