Я использую цикл для манипулирования несколькими переменными, используя битовые значения, как я иду. Я заметил, что я использую выражения if (some_state & (1 << i))
, а также some_var &= ~(1 << i)
в десятки раз раньше i
увеличивается
Эта процедура должна выполняться при регулярном прерывании, и мои основные часы не такие быстрые, поэтому я задаюсь вопросом, это лучшее, что я могу сделать. В моей голове это много операций.
Может быть, я мог бы сохранить смещенное значение и использовать его вместо этого.
for (int i=0; i<MAX; ++i) {
uint32_t mask_value = (1 << i);
if (some_state & mask_value) {
if (! --some_array[i].timer_value) {
some_var |= mask_value;
another_var &= ~mask_value;
}
}
...
}
Есть ли какой-либо четкий ответ? Возможно, это в большей степени ситуация, когда компилятор может оптимизировать до какого-то неизвестного уровня, поэтому кто может знать, пока я не выполню подпрограммы 10000 раз, проверим их время и сравню?
ОБНОВИТЬ:
Я использую GNU ARM Embedded Toolchain для моего микроконтроллера NXP LPC11 ARM (Cortex-M0).
Должно быть достаточно разумно, чтобы просмотреть сборку в IDE (на основе LPCXpresso, Eclipse) и профилировать ее.
Задача ещё не решена.
Других решений пока нет …