Это очень просто сделать, какой-то вариант:
Код: Выделить всё
error_type translate_error_type(uint8_t error_code) {
switch(error_code) {
case 0: return error_type::A;
case 1: return error_type::D;
// ... hundreds of more cases to deal with. Unforturnely not a good translation between error_codes and our internal classes over ranges of error_code values to make optimization easy.
}
}
Как бы вы написали эту функцию, чтобы компилятор (gcc11 в данном конкретном случае) генерировал лучший код, чем одна огромная таблица переходов, для оптимизации задержки в случае срабатывания одного из пяти доминирующих случаев? Или, по сути, одна огромная таблица переходов — это лучшее, что может сделать компилятор?
Примечание: к сожалению, глядя на сгенерированную сборку в gcc для маркировки случаев [[вероятно]], я не верю, что это работает хорошо, если несколько случаев помечены как вероятные.
Подробнее здесь: https://stackoverflow.com/questions/799 ... stribution
Мобильная версия