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

         

пример с лишними обращениями к памяти, от которых можно избавиться вручную


Компилятор не имеет права выносить переменную dst за пределы цикла, в результате чего обращения к памяти происходят в каждой итерации. Чтобы повысить производительность, код должен быть переписан так:

f(char *x, int *dst, int n)

{

       int i,t =0;

       for

(i=0;i<n;i++) t+=x[i]; // сохранение суммы во временной переменной

       *dst+=t;                   // запись конечного результата в память

}



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