【问题标题】:Maximum size of size_tsize_t 的最大尺寸
【发布时间】:2014-04-26 05:25:03
【问题描述】:

我知道在Csizeof 运算符的返回类型是size_t,它是<stdint.h> 中定义的无符号整数类型。这意味着它的最大大小应该是65535,如C99标准7.18.3中所述:

limit of size_t
  SIZE_MAX             65535

但是在gcc-4.8.2 头文件中stdint.h 定义了它的大小远远大于65535,这与C99 标准中的规定相矛盾,如下所示,

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

请帮助我理解为什么我的误解背后存在差异或原因。

【问题讨论】:

标签: c gcc sizeof c99 size-t


【解决方案1】:

标准规定SIZE_MAX 必须至少 65535。

它没有指定上限,gcc的实现完全有效。

引用你引用的参考文献(强调):

其实现定义的值应等于或大于在幅度(绝对值)上大于下面给出的相应值,符号相同。

【讨论】:

  • 现在说得通了。 SIZE_MAX 65535 是最低限度,我对 limit of size_t 认为它是最高限度感到困惑。谢谢
  • @SunEric:对,65535 是最小值。
  • 嫌疑人SIZE_MAX上限为UINTMAX_MAX
  • @chux: SIZE_MAX 不能大于UINTMAX_MAX,但UINTMAX_MAX 没有指定上限。 (说SIZE_MAX 的上限是SIZE_MAX 只是稍微没那么有用。)
  • C 中的各种限制往往有SIZE_MAX <= UINTMAX_MAX 之类的关系。 (可能所有未签名的人都非常有限——但很多人不知道这一点——因此我的评论。)但与LONG_MAX相比,一些限制没有很好的排序,比如SIZE_MAX。这两个使用fseek()(返回long)进行交互,使用malloc()分配一个块以匹配一个文件,size_t
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多