size_t是否足够大以表示任何类型的大小?

Ayx*_*xan 5 c size-t language-lawyer

是否size_t保证足够大以表示任何类型的大小?根据此参考:

size_t 可以存储任何类型(包括数组)的理论上可能存在的对象的最大大小。

通常,这是一个可靠的参考,但我在标准的相关部分中找不到任何证明或质疑此主张的内容。

小智 0

是的。size_t 在 stddef.h 中定义,根据C99 标准中有关 sizeof 运算符的部分 (6.5.3.4):

结果的值是实现定义的,其类型(无符号整数类型)是size_t,在(和其他标头)中定义<stddef.h>。

自从

运算sizeof符产生其操作数的大小(以字节为单位)

它的返回类型是size_t,size_t必须能够包含任何类型的大小。

  • @Ayxan但是,它*确实*说“‘sizeof’运算符产生其操作数的大小(以字节为单位)”。因此,“size_t”必须足够大,以存储可以应用“sizeof”的任何操作数的大小(否则“sizeof”不会产生标准要求的结果)。 (2认同)
  • @Angew 还有未声明的动态分配的对象。在某种程度上可以想象(尽管实际上极不可能)您可以调用比 size_t 中适合的更多的内容,尽管在我看来,参与如此深入的理论场景有点浪费时间。 (2认同)
  • C 标准允许实现有限制,并且允许运算符的理想结果超出类型中可表示的范围。虽然“size_t”的目的是能够表示实现支持的对象的大小,但 C 标准中并未明确说明这一点。 (2认同)