Tipo entero más rápido para arquitecturas comunes
losstdint.h
el encabezado carece de unint_fastest_t
yuint_fastest_t
para corresponder con el{,u}int_fastX_t
tipos. Para los casos en que el ancho del tipo entero no importa, ¿cómo se elige el tipo entero que permite procesar la mayor cantidad de bits con la menor penalización al rendimiento? Por ejemplo, si uno estaba buscando el primer bit establecido en un búfer utilizando un enfoque ingenuo, se podría considerar un ciclo como este:
// 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
daría lugar a más operaciones queint
. Perolong long
podría resultar en operaciones más caras que la sobrecarga de usarint
en un sistema de 32 bits y así sucesivamente.
Mi suposición actual es para las arquitecturas convencionales, el uso delong
es la apuesta más segura: es de 32 bits en sistemas de 32 bits y de 64 bits en sistemas de 64 bits.