Вот концептуально простой ответ: ширина int * N_t для всех трех типов должна быть> = N. intN_t имеет точно N битов, int_leastN_t является наименьшим (самым узким)такого типа, и int_fastN_t является быстрым такого типа.
Например, на машине с 8-битными байтами и 32-битными быстрыми регистрами, int8_t и int_least8_t имеют псевдоним со знаком char, но int_fast8_t являетсяс псевдонимом int32_t.Принимая во внимание, что если бы реализация выбрала их определение, int_least24_t и int_fast24_t были бы связаны с int32_t, а int24_t оставлено неопределенным.
Редактировать: как указывает Технофил ниже, реальная проблема для быстрых типов - это память, а не регистры (как правило, операции над младшими битами регистров могут выполняться так же быстро, как и над всем регистром).Например, запись в int8_t в памяти может потребовать загрузки 32-разрядного слова, содержащего его, изменения только байта, а затем его обратной записи, тогда как если бы он был сохранен в 32-значном слове, он мог бы быть записан без чтения.