数が非常に大きくなる可能性があることを考えると、安全に使用できunsigned long
ますか?
FWIW、Apache ログからすべてのマイクロ秒を合計しているため、数値が非常に大きくなる可能性があります。
32 ビット プラットフォームで保存できる最大値unsigned long
が約 4G であることを考えると、これらの 4G マイクロ秒はわずか 71 分に変換されます。
64 ビット プラットフォーム (Windows 64 ビットであっても、Windows では long は常に 32 ビットであることに注意してください) では、最大 4G に 71 分を掛けたマイクロ秒をカウントできます。これは巨大です: 約 5800 世紀。
回答: unsigned long
64 ビットであれば問題ありません。
依存します。ウィキペディアに記載されunsigned long
ているように、少なくとも 32 ビットであることが保証されていますが、それはマシンに依存する可能性があると思います。32 ビットを使用すると、2^32 = 4294967296 の数値を表すことができます。4294967296 マイクロ秒は 4294 秒、つまり 1 時間を少し超えます。
もっと必要ですか?その場合は、unsigned long long
64 ビットであることが保証されている を使用することを検討してください。ただし、これは C99 です。それ以外の場合は、 timeval 構造体が行うように、常に秒を別の変数に個別に格納できます。
unsigned long integer を使用できます。そのサイズは 0 ~ 4294967295 バイトです
32 ビットの符号なし整数は、マイクロ秒単位で約 1 時間 11 分になります。
4,294.967295 seconds
一方、64 ビットの符号なし整数では、50 万年以上になります。
unistd.h
宣言しuseconds_t
ます。
タイトルではなく質問の本文を参照して更新します。
を使用して秒数を数えtime_t
、残りを を使用してマイクロ秒単位で保存しuseconds_t
ます。これにより、ソースは 100% 移植可能になります。
更新 2
最近の Debian が であると宣言しsuseconds_t
ていることを発見しましたlong int
。