Самый быстрый целочисленный тип для распространенных архитектур
stdint.h
в заголовке отсутствуетint_fastest_t
а такжеuint_fastest_t
соответствовать{,u}int_fastX_t
типы. Для случаев, когда ширина целочисленного типа не имеет значения, как выбрать целочисленный тип, который позволяет обрабатывать наибольшее количество битов с наименьшим ухудшением производительности? Например, если кто-то искал первый установленный бит в буфере, используя наивный подход, такой цикл можно рассмотреть следующим образом:
// return the bit offset of the first 1 bit
size_t find_first_bit_set(void const *const buf)
{
uint_fastest_t const *p = buf; // use the fastest type for comparison to zero
for (; *p == 0; ++p); // inc p while no bits are set
// return offset of first bit set
return (p - buf) * sizeof(*p) * CHAR_BIT + ffsX(*p) - 1;
}
Естественно, используяchar
приведет к большему количеству операций, чемint
, Ноlong long
может привести к более дорогим операциям, чем использованиеint
в 32-битной системе и так далее.
Мое текущее предположение для основных архитектур, использованиеlong
самая безопасная ставка: она 32-битная в 32-битных системах и 64-битная в 64-битных системах.