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.