【发布时间】: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