C++-ban érdemes az alapból megadott függvényeket használni, vagy gyorsabb, ha sajátot készítünk?
Pl. érdemes saját abs(), sqrt(), pow() függvényeket csinálni, hogy gyorsabban lefussanak?
És négyzetre emelésnél érdemesebb kétszer összeszorozni magát a számot, mint függvényt használni?
Sebesség illetve méret tekintetében kérdezem.
Én megnéztem gyorsan ezt:
#include <cmath>
int main() {
int a = 5 * 5;
}
És ezt:
#include <cmath>
int main() {
int a = pow(5, 2);
}
Nálam pontosan ugyanarra az assemblyre fordulnak:
_main:
LFB231:
.cfi_startproc
push ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
mov ebp, esp
.cfi_def_cfa_register 5
and esp, -16
sub esp, 16
call ___main
mov DWORD PTR [esp+12], 25
mov eax, 0
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
#9 te milyen fordítót használsz? Megnézem azzal is.
Megtettem, szintén megegyezik az assembly:
_main:
LFB264:
.cfi_startproc
push ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
mov ebp, esp
.cfi_def_cfa_register 5
and esp, -16
call ___main
xor eax, eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
Tehát továbbra sem gyorsabb a pow, nemhogy sokkal, de semmivel sem.
Azért kérdezem, hogy milyen fordítót használsz. Megnézem azzal, mert már kíváncsi vagyok.
Segítek nektek szakértők, hogy miért lesz a pow esetén ugyanaz az assembly.
Úgy hívják, hogy optimalizáció. A fordító látja, hogy mit akarsz a pow-val csinálni, így fel van készítve rá. Akárcsak arra is, hogy kettővel való osztás maradékáért elég az utolsó bitet kiolvasni, és nem kell osztogatnia a számokat, és még sok hasonló gyakori művelet optimalizálva van. Éppen ezért mondtam, hogy a gyári beépített függvények jól optimalizálva vannak, a fordító ismeri őket (amúgy #1 vagyok). Ha te magad írod meg a függvényt, akkor meg nem biztos hogy tudja, mi a célod, így kisebb optimalizációkat tud csak sokszor végrehajtani.
14: de jó, hogy jöttél!
Sose jöttünk volna rá.
Köszönöm #14, azt hittem részeg a fordító és nem tud különbséget tenni.
De #4 szerint a pow "sokkal gyorsabb", úgyhogy biztos így van, csak nem árulta még el, hogy milyen fordítóval.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!