Цитата(sigmaN @ Feb 26 2017, 12:35)

Я вот сейчас немного подумал и.... всё равно не придумал как можно сделать оптимальнее. Как мне кажется во всех вариантах будет еще один байт.
Про "еще один байт" не понял. Если у Вас цель какие-то байты экономить, а не такты, то так и напишите.
Для, например, 256 задач (реальный случай во времена i8080 2MHz) крутить 256 счетчиков - весь пар свисток уйдет. Да и не меньших количествах уже не подарок.
Такие тривиальные вещи вообще незачем делать "универсальными", если стоит задача сэкономить все и вся. Правильнее писать по месту, что для подобных вырожденных случаев ничуть не сложнее.
Цитата
Раньше было
if( timers[i] > 0 )
--timers[i];
Это было на целых 2 байта длиннее! При прочих равных настройках оптимизации и т.д.
Не верю! Если, вдруг, не одно и тоже, то первым шагом борьбы за что либо, следует выкинуть используемый компилятор.
А самое читабельное:
Код
if( timers[i] )
timers[i]--;