32位和64位Linux机器中4字节类型之间的差异

时间:2015-03-26 21:02:25

标签: c++ linux 64-bit size porting

我将Linux C ++项目从32位移植到64位。

在我们的32位系统中," long"长度为4个字节。但是当我们以64位模式构建我们的项目时,我们注意到" long"占用8个字节。由于我们需要4字节长的类型,我们使用" int"并确认它确实是4字节长。我们希望我们的代码可以无缝运行。

但不幸的是没有,即使"长"在32位模式和" int"在64位模式下,两个都是4字节长,我们的代码失败了。

有人可以告诉我们,如果" long"之间存在差异(布局或其他方面)在32位模式和" int"在64位模式?即使两个都是4字节长?

  • 机器:Linux x86_64
  • OS:CentOS 6.6
  • gcc:4.9.2

3 个答案:

答案 0 :(得分:1)

如果您需要特定于字节长度的数据类型,请从cstdint查看int32_tuint32_t

保证类型为给定长度,有符号和无符号。

答案 1 :(得分:1)

谢谢大家。问题是我们的代码本地/特定的问题,我们假设指针总是4字节长。当我们取消引用它们时,我们将它们转换为4字节变量并且正在失去精度。这导致了崩溃。由于这是许多人多年来开发的大型代码库,因此有很多遗留代码都有这些假设,我不得不重复所有指针并修改它们。最后,我们已成功将代码移植到64位模式。

答案 2 :(得分:0)

看看这个 - Size guarantees in C++。内置类型(int,long等)满足一些最小尺寸,但每个系统上不需要4个字节。您可以使用固定宽度类型(如dwcanillas的评论中所述)。