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

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

Против

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

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

c nxt
1
mailmindlin 29 Авг 2014 в 18:55

2 ответа

Лучший ответ

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

1
Steve Cox 29 Авг 2014 в 15:42

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

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

0
cmaster - reinstate monica 29 Авг 2014 в 16:29