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

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


Компилятор не имеет права на размещение содержимого ячейки *a в регистровой переменной, поскольку если ячейки *a и *b

частично или полностью перекрываются, модификация ячейки *b

приводит к неожиданному изменению ячейки *a! Бред, конечно, но ведь Стандарт этого не запрещает, а компилятор _обязан_ следовать Стандарту, иначе, его место — на свалке.

Тоже самое относится и к следующему примеру:

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

{

       int i;

       for (i = 0; i < n; i++) *dst += x[i];

}



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