В чем разница между intXX_t и int_fastXX_t?

Недавно я обнаружил существование стандартного самого быстрого типа, в основном 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 действительно быстрее классических?

48
задан Coren 11 February 2012 в 11:32
поделиться