В нижней части Демистификация ограничивающего ключевого слова - это любопытный совет:
Из-за порядка, в котором планирование выполняется в GCC, всегда лучше упрощать выражения. Не смешивать доступ к памяти с расчетами. Код можно переписать следующим образом:
то есть пример, который по существу трансформирует этот
velocity_x[i] += acceleration_x[i] * time_step;
в этот
const float ax = acceleration_x[i]; // Then the same follows for y, z
const float vx = velocity_x[i]; // etc for y, z
const float nvx = vx + ( ax * time_step ); // etc
velocity_x[i] = nvx; // ...
Действительно? Я бы подумал, что такое преобразование было тривиальным по сравнению с другими факторами, которые должны были бы оптимизировать компиляторы, такими как аргументы лямбда для std::foreach
и т.д.
Это просто устаревший, глупый совет? Или есть веская причина, по которой GCC не может этого или не сделает? (Это заставляет меня беспокоиться о написании выше как velocity += acceleration * time_step
с помощью моего класса Vector3f
!