У меня есть функция в моем основном цикле, которая называется ~ 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 - это пустая операция: все локальные переменные выделяются с помощью одной инструкции, которая уменьшает указатель стека, что в любом случае необходимо делать почти во всех функциях. И обычно доступ к стековой памяти - самый быстрый из возможных. Итак, в целом, вы не должны ожидать разницы в производительности между вашими двумя программами. Если есть разница, вы должны ожидать, что глобальная переменная будет немного медленнее.
Однако я специально использовал слова «обычно» и «в целом»: оборудование может существовать там, где это не так. А про ваш процессор я не знаю. Так что, конечно, прислушайтесь к совету Алекса Клеймана и измерьте. Когда дело доходит до оптимизации, измерение - единственный источник истины.
Похожие вопросы
Связанные вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.