【问题标题】:Can sizeof(int) = 1 on either 32 or 64 bit platforms?sizeof(int) = 1 在 32 位或 64 位平台上可以吗?
【发布时间】:2014-10-09 04:43:04
【问题描述】:

N3797::3.9.1/2 [basic.fundamental]部分有:

有五种标准有符号整数类型:“signed char”、“short int”、“int”、“long int”和“long long int”。在此列表中,每种类型 至少提供与列表中前面一样多的存储空间。

标准明确定义 char, unsigned char, signed char 的大小为 1。据我所知,普通 ints 的大小取决于 INT_MININT_MAX 未标准化。那么实现可以定义INT_MININT_MAX这样sizeof(int) = 1;吗?

【问题讨论】:

标签: c++


【解决方案1】:

是的。 signed charshortintlonglong long 完全有可能具有相同的 64 位表示,其大小为 1。

这对标准库的唯一影响是remove some typedefs from stdint.h - 具体来说,int8_tint16_tint32_tint64_tuint8_tuint16_tuint32_t、@987654336 @。请注意,uint8_least_tuint8_fast_t 等仍然会提供。

编辑:添加@user657267的链接:1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long),其中还包括具体的位大小要求(但请注意,只有值范围是规范的)

必须支持以下取值范围:

  • signed char: -(27-1) 到 27-1
  • unsigned char:0 到 28-1
  • signed short: -(215-1) 到 215-1
  • unsigned short:0 到 216-1
  • signed int:-(215-1) 到 215-1
  • unsigned int:0 到 216-1
  • signed long: -(231-1) 到 231-1
  • unsigned long:0 到 232-1
  • signed long long: -(263-1) 到 263-1
  • unsigned long long: 0 到 264-1

编辑:内嵌链接中的更多信息

【讨论】:

    【解决方案2】:

    是的,只要一个字节至少有 16 位,因为这是int 的最小大小。

    这在 DSP 架构上很常见,通常只允许访问例如 32 位内存字,而不允许访问更小的单元。

    【讨论】:

    • 这是在 DSP 上 sizeof(signed char) = sizeof(short) = sizeof(int) 并且消耗了 32 位的存储量。对吗?
    • @DmitryFucintv:在 32 位架构上,没有小于 32 位的可寻址单元,是的。
    猜你喜欢
    • 2016-11-30
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多