Optymalizacja operatora warunkowego.

0

Hajo!
Przyznam szczerze, że to nie z lenistwa, a z braku czasu na przeglądanie dokumentacji - tudzież komplikacje do asm (problem jest dość niszowy). Najprawdopodobniej ktoś już wcześniej spotkał się z podobną wątpliwością i będzie potrafił odpowiedzieć od ręki.

int x;
std::cin>>x;
cin.ignore;

x = (x > 10 ? 10 : x);
if( x > 10 ) x = 10;

I tutaj pytanie. Czy komplikatory( i jakie ) zoptymalizują operator warunkowy do prostszej wersji?

Ja ze swojej strony obiecuję sprawdzić wieczorkiem jak to wygląda na VS 2010 :)

0

http://goo.gl/aWP0O2 - clang 3.3, operator?:
http://goo.gl/eWAqRR - g++ 4.8, operator?:
http://goo.gl/UPBm0j - clang 3.3, if
http://goo.gl/xDhIeZ - g++ 4.8, if

Różnice minimalne, podejrzewałbym, że poniżej kosztu odwołania się do cache'u, o ramie nie wspominając.

2

@kq: kody, które podałeś nie robią tego samego. W wersji dla if zrobiłeś przypisanie x = 0 a powinno być x = 10. Po tej zmianie wynik dla operatora i if jest identyczny.

Przecież po przerobieniu kodu źródłowego na kod pośredni (czy tam inne drzewa) te wyrażenia są całkowicie identyczne o ile gałąź x = x została usunięta. Tutaj widać, że operator jest "mniej bezpieczny" pod względem optymalizacji, bo niemądry kompilator jeszcze by to zostawił.

1 użytkowników online, w tym zalogowanych: 0, gości: 1