Witam,
czy kompilatory same optymalizują mnożenie przez dwa?
mam takie wyrazenie: x*2
czy kompilator sam to zamieni na: x << 1
czy sam musze tak pisac w kodzie?
mowa o kompilatorze z VC++ 2005
?
Witam,
czy kompilatory same optymalizują mnożenie przez dwa?
mam takie wyrazenie: x*2
czy kompilator sam to zamieni na: x << 1
czy sam musze tak pisac w kodzie?
mowa o kompilatorze z VC++ 2005
?
To nie jest assembler. Na 99% zmieni, choć po MS nigdy nic nie wiadomo ;p
elwis napisał(a)
To nie jest assembler. Na 99% zmieni, choć po MS nigdy nic nie wiadomo ;p
Chcialbym miec 100% pewnosci. Jest w VC++ okno Disassembly ale po optymalizacji to ja tam nie widze ani instrukcji mnozenia ani przesuniecia. Niestety nie znam sie na asemblerze zbytnio wiec pewnie blednie rozumuje.
Dodam, ze mam włączoną optymalizacje objętościową.
Moze to jakis fachowiec potwierdzic albo sprawdzić?
OK,
w wersji Debug jest zamienione na shl wiec w Release pewnie tez
A nie powinno być zmieniane na shl x,1
tylko na add x, x
/zakładając, że x jest w rejestrze/. Shl jest wolniejszy od add, także od lea /ze względu na to, że lea i tyka flag/.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.