Техника оптимизации под линуха

       

пример программы с неиспользуемыми выражениями


Выражение (n+0x666) не используется, перекрываясь следующей операцией присвоения (2*n). Выражение (n-0x999) теряется при выходе из функции. Следовательно, наш код эквивалентен: return (n – 0x999).

Не всегда такая оптимизация проходит безболезненно. Компиляторы "забывают" о том, что некоторые вычисления имеют побочные эффект в виде выброса исключения. Код вида: a = b/c; a = d, можно оптимизировать в том, и только в том случае, если переменная c заведомо не равна нулю. Но ни один из трех рассматриваемых компиляторов такой проверки не выполняет! Забавно, но в сокращении арифметических выражений (о которых речь еще впереди), оптимизаторы ведут себя намного более осторожно — никто из них не рискует заменять сокращать выражение (a/a) 1 до единицы, даже если переменная a заведомо не равна нулю! Бардак в общем.



Содержание раздела