Daha hızlı olan : (bool) veya(int)?
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
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.
Python ile daha hızlı olan: x**.5 veya...
Daha hızlı olan: birden fazla tek Ekle...
Çift.TryParse veya Dönüştürmek.Daha hı...
Hangisi daha hızlı: while(1) veya(2)?...
Daha hızlı olan: ayırma ya da Yığın Yı...