web-dev-qa-db-ja.com

size_tの最大サイズ

Csizeof演算子の戻り値の型はsize_tで定義されている<stdint.h>で定義されている符号なし整数型であることを知っています。つまり、その最大サイズは65535 standard 7.18. に記載されているC99である必要があります。

limit of size_t
  SIZE_MAX             65535

ただし、gcc-4.8.2ヘッダーファイルでstdint.h65535よりもはるかに大きなサイズを定義しているため、以下に示すようにC99標準で述べられているサイズと矛盾します。

/* Limit of `size_t' type.  */
# if __WORDSIZE == 64
#  define SIZE_MAX              (18446744073709551615UL)
# else
#  define SIZE_MAX              (4294967295U)
# endif

誤解の背後になぜ違いや理由があるのか​​を理解する助けになります。

34

標準では、SIZE_MAXは、少なくとも65535でなければなりません。

上限は指定されておらず、gccの実装は完全に有効です。

引用した引用を引用する(強調を追加):

その実装定義の値は、等しいかそれ以上の大きさ(絶対値)が、以下に示す対応する値と同じ符号であるものとします。

46
Keith Thompson