Daha hızlı olan : (bool) veya(int)? | Netgez.com
SORU
23 NÄ°SAN 2011, CUMARTESÄ°


Daha hızlı olan : (bool) veya(int)?

Which value is better to use? Boolean true or Integer 1?

Yukarıdaki konu bana bool int Bazı deneyler yapmak 5 ** durumda yaptı. Yani sadece meraktan soruyorum bu program yazdım:

int f(int i) 
{
    if ( i ) return 99;   //if(int)
    else  return -99;
}
int g(bool b)
{
    if ( b ) return 99;   //if(bool)
    else  return -99;
}
int main(){}

g intbool.cpp -S aşağıdaki gibi, her bir fonksiyonu için sembolik makina kodu üretir

  • f(int) sembolik makina kodu

    __Z1fi:
       LFB0:
             pushl  ëp
       LCFI0:
              movl  %esp, ëp
       LCFI1:
              cmpl  $0, 8(ëp)
              je    L2
              movl  $99, êx
              jmp   L3
       L2:
              movl  $-99, êx
       L3:
              leave
       LCFI2:
              ret
    
  • g(bool) sembolik makina kodu

    __Z1gb:
       LFB1:
              pushl ëp
       LCFI3:
              movl  %esp, ëp
       LCFI4:
              subl  $4, %esp
       LCFI5:
              movl  8(ëp), êx
              movb  %al, -4(ëp)
              cmpb  $0, -4(ëp)
              je    L5
              movl  $99, êx
              jmp   L6
       L5:
              movl  $-99, êx
       L6:
              leave
       LCFI6:
              ret
    

, g(bool) daha fazla üretir asm talimatları şaşırtıcı! if(bool) if(int) daha yavaş olduğu anlamına mı geliyor? Düşündüm bool özellikle tasarlanmış için kullanılan koşullu deyimi gibi if, bu kadar beklediğim g(bool) oluşturmak için daha az kanamayla talimatları, böylece yapma g(bool) daha verimli ve daha hızlı.

DÃœZENLEME:

Şu an itibariyle herhangi bir optimizasyon bayrak kullanmıyorum. Ama onun yokluğu, neden g(bool) daha fazla akış oluşturur mu hangi makul bir cevap aradığım bir soru. Ayrıca -O2 optimizasyon bayrak aynı akış oluşturur söylemeliyim. Ama asıl soru bu değil. Soruyu sordum.


CEVAP
23 NÄ°SAN 2011, CUMARTESÄ°


Bana mantıklı geliyor. Derleyici anlaşılan tanımlar bool 8-bit değeri, ve sistem ABİ gerektirir bunun için "teşvik" küçük (< 32-bit) tamsayı değişkenler 32-bit zaman iterek onları üzerine çağrı yığını. Yani karşılaştırmak bool derleyici kodu g aldığı 32-bit bağımsız değişkeni en az önemli bayt ayırmak için üretir ve cmpb ile karşılaştırır. İlk örnekte int değişken bu sadece cmpl bütün bunlara karşı karşılaştırır, böylece yığın itildiği, tam 32 bit kullanır.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Edge-CGI 3D Tutorials and more!

    Edge-CGI 3D

    11 HAZÄ°RAN 2013
  • Kamikazeepanda

    Kamikazeepan

    5 ÅžUBAT 2006
  • Karan Thakur

    Karan Thakur

    23 HAZÄ°RAN 2010