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.

Respuestas a la pregunta(9)

Su respuesta a la pregunta