Tipo inteiro mais rápido para arquiteturas comuns

ostdint.h cabeçalho carece deint_fastest_t euint_fastest_t corresponder com o{,u}int_fastX_t tipos. Para casos em que a largura do tipo inteiro não importa, como escolher o tipo inteiro que permite processar a maior quantidade de bits com a menor penalidade no desempenho? Por exemplo, se alguém estivesse procurando o primeiro bit definido em um buffer usando uma abordagem ingênua, um loop como esse poderia ser considerado:

// 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;
}

Naturalmente, usandochar resultaria em mais operações do queint. Maslong long pode resultar em operações mais caras do que a sobrecarga do usoint em um sistema de 32 bits e assim por diante.

Minha suposição atual é para as arquiteturas convencionais, o uso delong é a aposta mais segura: são 32 bits em sistemas de 32 bits e 64 bits em sistemas de 64 bits.

questionAnswers(9)

yourAnswerToTheQuestion