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
ます。ただし、32ビットシステムなどlong long
で使用するオーバーヘッドよりもコストのかかる操作になる可能性があります。int
私の現在の仮定は主流のアーキテクチャであり、の使用がlong
最も安全な方法です。32ビットシステムでは32ビット、64ビットシステムでは64ビットです。