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

  • Best Quality Cartoons

    Best Quality

    10 ŞUBAT 2014
  • Microsoft Help & Training Videos

    Microsoft He

    31 Mart 2009
  • Video Copilot

    Video Copilo

    21 EYLÜL 2006