【问题标题】:different size of c data type in 32 and 64 bit32位和64位c数据类型的不同大小
【发布时间】:2016-12-28 16:24:21
【问题描述】:

为什么在 32 位和 64 位系统中 C 数据类型的大小不同...

例如:int size in 32bit 是 4 byte,64bit 是 8 byte

将 64 位数据类型的大小加倍背后的原因是什么?据我所知,如果我们要在 64 位系统中使用与 32 位系统相同的大小,则不会出现性能问题。 ..

【问题讨论】:

  • 因为标准允许。原因主要是历史和向后兼容性。如果您需要固定宽度的整数,请查看 C99 提供的<stdint.h>
  • 64 位处理器具有使用 64 位数字的寄存器。在 32 位处理器上,这些对 64 位数字的操作是“模拟的”,因此速度较慢。
  • 根据en.wikipedia.org/wiki/64-bit_computing,IL32P64和I32LP64占多数,所以“int size in 32bit is 4 byte and 8 byte in 64bit”是很不准确的。
  • 64 位数据类型也会对​​性能产生影响,具体取决于实现。出于这个原因,x32 ABI 被发明用于在 x86-64 硬件上将指针大小降级回 32 位,并显示出比 x86-64 更好的性能。同样,ARM64 上的 Android 也选择使用 32 位用户空间。同理,在 i386 发布后,int 类型长期停留在 16 位。
  • 您忘记说明为什么您希望它们具有相同的大小。为什么不只问 32 和 64,而不是 8 或 16 位系统?还是 18 位或 24 位系统?

标签: c architecture


【解决方案1】:

为什么在 32 位和 64 位系统中 C 数据类型的大小不同[?]

C 的基本数据类型的大小取决于实现。它们不一定依赖于机器架构,反例比比皆是。例如,GCC 的 32 位和 64 位实现对 x86 和 x86_64 使用相同大小的数据类型。

将 64 位数据类型的大小翻倍的原因是什么[?]

实施决策的原因因实施者和实施特征而异。 int 通常(但并非总是)选择具有某种意义上对目标机器来说自然的大小。这可能意味着对它的操作很快,或者从内存加载和存储到内存或其他东西是有效的。这些是所涉及的各种考虑因素。

【讨论】:

    【解决方案2】:

    C 语言定义没有规定大多数数据类型的特定大小;相反,指定每种类型必须能够表示的值的范围char 必须足够大以表示执行字符集的单个字符(至少范围 [-127,127]),shortint 必须足够大以表示 至少范围[-32767,32767]

    传统上,int 的大小与给定架构的“自然”字长相同,前提是 a) 它更容易实现,b) 对该类型的操作最多高效的。今天是否仍然如此,我没有资格说(不是硬件人)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      相关资源
      最近更新 更多