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

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-битной системе и так далее.

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

Ответы на вопрос(9)

Ваш ответ на вопрос