SORU
7 Ocak 2011, Cuma


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
7 Ocak 2011, Cuma


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:

flagne 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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 8lacKy

    8lacKy

    30 Mart 2009
  • modica89

    modica89

    24 HAZİRAN 2007
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009