C Переменная скорость создания

У меня есть функция в моем основном цикле, которая называется ~200 Гц. Он работает на NXT, поэтому процессор довольно медленный. В моей функции он создает переменную, записывает ее на экран и завершает работу. Из-за скорости процессора мне нужно, чтобы эта функция была максимально быстрой, и мне было интересно, быстрее ли объявить переменную в глобальной области видимости и сбросить ее каждый раз, когда вызывается функция, или создавать ее экземпляр в функции. Для пояснения, какой пример будет быстрее?

 int foo=0;
 void bar() {
    foo=0;
    //do something with foo
 }

против

void bar() {
   int foo=0;
   //do something with foo
}

Очевидно, я хотел бы использовать второй фрагмент в моем коде, потому что глобальные переменные считаются "плохими", но процессор NXT действительно медленный.

2 ответа

Решение

Когда у вас есть что-то подобное, лучше всего просто измерить скорость обоих вариантов. На самом деле нет никакого способа узнать наверняка, что было бы лучше без их тестирования, особенно если учесть, что вы не знаете, как ваш компилятор даже компилирует ваш код.

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

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

Другие вопросы по тегам