Самый быстрый целочисленный тип для обычных архитектур

В заголовке stdint.h отсутствует int_fastest_t и uint_fastest_t для соответствия типам {, u} int_fastX_t . В случаях, когда ширина целочисленного типа не имеет значения, как выбрать целочисленный тип, который позволяет обрабатывать наибольшее количество бит с наименьшим ущербом для производительности? Например, если кто-то искал первый установленный бит в буфере с использованием наивного подхода, можно было бы рассмотреть такой цикл:

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

Естественно, использование char приведет к большему количеству операций, чем ] int . Но long long может привести к более дорогостоящим операциям, чем накладные расходы на использование int в 32-битной системе и т. Д.

Мое текущее предположение - для основных архитектур, использование of long - самая безопасная ставка: это 32-битная версия в 32-битных системах и 64-битная в 64-битных системах.

13
задан Rob Hruska 10 May 2012 в 18:46
поделиться