Недавно я обнаружил существование стандартного самого быстрого типа, главным образом int_fast32_t и int_fast64_t.
Мне всегда говорили, что для нормального использования в основной архитектуре лучше использовать классический int и long, который всегда должен соответствовать размеру чтения по умолчанию процессора и избегать ненужных числовых преобразований.
В стандарте C99 говорится в §7.18.1.3p2:
"Имя typedef int_fastN_t обозначает наивысший тип целочисленного знака с шириной не менее N. Имя typedef uint_fastN_t обозначает самый быстрый целочисленный тип без знака с шириной не менее N."
И есть также цитата об этом в §7.18.1.3p1:
"Назначенный тип не гарантированно будет самым быстрым для всех целей, если в реализации нет четких оснований для выбора одного типа над другим, он просто выберет некоторый целочисленный тип, удовлетворяющий требованиям подписности и ширины".
Мне непонятно, что самое быстрое означает. Я не понимаю, когда я должен использовать этот тип, а когда не должен.
Я немного поработал над этим и обнаружил, что некоторые открывают источник изменили некоторые свои функции, но не все из них. Они действительно не объяснили, почему они изменили часть и только часть их кода.
Знаете ли вы, каковы конкретные случаи/обычаи, когда int_fastXX_t действительно быстрее классических?