64 ビット システムでsizeof(unsigned long)
は、システムによって実装されるデータ モデルによって異なります。たとえば、LLP64 (Windows) では 4 バイト、LP64 (Linux など) では 8 バイトです。あるべきものは何sizeof(size_t)
ですか?データモデルによって異なりますsizeof(long)
か? もしそうなら、どのように?
参考文献:
64 ビット システムでsizeof(unsigned long)
は、システムによって実装されるデータ モデルによって異なります。たとえば、LLP64 (Windows) では 4 バイト、LP64 (Linux など) では 8 バイトです。あるべきものは何sizeof(size_t)
ですか?データモデルによって異なりますsizeof(long)
か? もしそうなら、どのように?
参考文献:
オブジェクトのサイズを表すため、アーキテクチャによって異なるはずです。したがって、32 ビット システムsize_t
では、少なくとも 32 ビット幅になる可能性があります。64 ビット システムでは、少なくとも 64 ビット幅になります。
size_t は通常、64 ビット マシンでは 64 ビットです。
編集:コメントをありがとう - C99 標準で調べたところ、セクション 6.5.3.4 に次のように書かれています。
結果の値は実装定義であり、その型 (符号なし整数型) は(およびその他のヘッダー)
size_t
で定義されています。<stddef.h>
したがって、のサイズsize_t
は指定されていませんが、符号なし整数型でなければなりません。ただし、標準の 7.18.3 章に興味深い仕様があります。
の限界
size_t
SIZE_MAX 65535
これは基本的に、 のサイズに関係なくsize_t
、許容される値の範囲は 0 ~ 65535 であり、残りは実装に依存することを意味します。