Schnellster Integer-Typ für allgemeine Architekturen

Dasstdint.h Header fehlt einint_fastest_t unduint_fastest_t mit dem @ korrespondier{,u}int_fastX_t Typen. In Fällen, in denen die Breite des Integer-Typs keine Rolle spielt, wie wählt man den Integer-Typ aus, der die Verarbeitung der größten Anzahl von Bits mit der geringsten Beeinträchtigung der Leistung ermöglicht? Wenn man zum Beispiel mit einem naiven Ansatz nach dem ersten gesetzten Bit in einem Puffer sucht, könnte eine Schleife wie diese in Betracht gezogen werden:

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

Natürlich mitchar würde zu mehr Operationen führen alsint. Aberlong long kann zu teureren Vorgängen führen als der Aufwand für die Verwendung vonint Auf einem 32-Bit-System und so weiter.

eine derzeitige Annahme ist für die Mainstream-Architekturen die Verwendung vonlong ist die sicherste Wette: 32-Bit auf 32-Bit-Systemen und 64-Bit auf 64-Bit-Systemen.

Antworten auf die Frage(18)

Ihre Antwort auf die Frage