Мощь и беспомощность автоматической оптимизации



             

Удаление копий переменных


Для повышения читабельности листинга программисты обычно загоняют каждую сущность в "свою" переменную, не обращая внимания на образующуюся избыточность: многие переменные либо полностью дублируются, либо связаны друг с другом несложным математическим соотношением и для экономии памяти их можно сократить алгебраическим путем.

В англоязычной литературе данный примем называется "размножением копий" ("copy propagation"), что на первый взгляд не совсем логично, но если задуматься, то все проясняется: да, мы сокращаем переменные, размножая копии, хранящихся в них значений, что наглядно продемонстрировано в следующем примере:

main(int n, char** v)

{

       int a, b;

       …

       a

= n+1;

       b

= 1-a;      // избавляется от переменной a: (1 – (n + 1));

       return a-b;   // избавляется от переменной b: ((n + 1) – (1 – (n + 1)));

}




Содержание  Назад  Вперед