Хорошо старые K & Компиляторы R C в начале восьмидесятых используются для создания кода как можно ближе к тому, что написал программист, а программисты использовали все возможное для создания оптимизированного исходного кода. Современные оптимизирующие компиляторы могут перерабатывать вещи при условии, что полученный код имеет одинаковые наблюдаемые эффекты в качестве исходного кода. Поэтому здесь, если переменная input
не используется вне цикла, оптимизирующий компилятор может оптимизировать линию double input = 0.0;
, потому что нет никаких наблюдаемых эффектов до следующего назначения: input = inputs[i];
. И по той же причине может быть тот же фактор, что и перенос переменной вне цикла (будь то в исходном файле C++ внутри или нет).
Краткая история, если вы не хотите создавать код для одного конкретного компилятора с одним определенным набором параметров, и в этом случае вам следует тщательно изучить сгенерированный ассемблерный код, вы не должны волноваться за эти оптимизации на низком уровне. Некоторые говорят, что компилятор умнее вас, другие говорят, что компилятор будет создавать свой собственный код, как бы я ни писал,.
Важно то, что это просто читаемость и переменная область видимости. Здесь input
является функционально локальным для цикла, поэтому он должен быть объявлен внутри цикла. Полная остановка. Любые другие соображения оптимизации просто бесполезны, если у вас нет особых требований к оптимизации низкого уровня (профилирование, показывающее, что эти строки требуют специальной обработки).
В этом конкретном примере кода «двойной вход = входы [nChannels -1];' было бы еще лучше. – StoryTeller
В мире полно людей, которые думают, что знают, как работают компиляторы двадцать лет назад, и они все еще работают сегодня. –
Я не знаю, что имел в виду эксперт DSP, но идея состоит в том, чтобы сохранить инициализацию переменной как можно ближе к месту в коде, где они используются. И это даже лучше, если вы можете держать его в наименьшей возможной области. – StoryTeller