不同位大小的操作系统上的数据类型之间是否存在差异?

时间:2012-04-05 04:09:30

标签: 64-bit 32bit-64bit 32-bit

我有一个C程序,我知道在32位系统上工作。在64位系统(至少是我的)上,它可以工作到一个点,然后停止。阅读一些论坛程序可能不是64位安全吗?我认为它与32位和64位系统之间的数据类型差异有关。

两者的char是否相同?那么intlong或他们的unsigned变种呢?有没有其他方式32位程序不是64位安全的?如果我想验证应用程序是64位安全的,我应该采取什么步骤?

1 个答案:

答案 0 :(得分:1)

C中的常规数据类型具有最小值范围而不是特定位宽。例如,short必须能够至少表示-32767到32767(包括端点)。

所以,是的,如果你的代码依赖于在32768左右的值,那么如果短片是一个很大的鸣笛128位庞然大物,它就不太可能表现得很好。

如果您需要特定宽度的数据类型,请查看stdint.hint64_t等内容。有多种选择,特定宽度,“至少”宽度等等。与“常规”整数类型不同,他们还要求对这些进行补充:

  • 具有一定精确宽度的整数类型;
  • 具有至少某些指定宽度的整数类型;
  • 具有至少特定指定宽度的最快整数类型;
  • 整数类型足以容纳指向对象的指针;
  • 具有最大宽度的整数类型。

例如,来自C11 7.20.1.1 Exact-width integer types

  

typedef名称intN_t指定带宽为N的无符号整数类型,无填充   位和二进制补码表示。因此,int8_t表示这样的签名   整数类型,宽度恰好为8位。

如果您遵循了规则(不会将指针转换为整数),那么您的代码应该在任何实现和任何体系结构上编译和运行。

如果没有,您只需要开始调试,然后在专门用于此类事情的论坛网站上发布似乎导致问题的详细信息和代码。我现在在哪里见过最近的一个? : - )