标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;
}
自然, usingchar
会导致比 . 更多的操作int
。但可能会导致比在32 位系统上long long
使用的开销等更昂贵的操作。int
我目前的假设是针对主流架构,使用long
是最安全的选择:在 32 位系统上是 32 位,在 64 位系统上是 64 位。