我将Linux C ++项目从32位移植到64位。
在我们的32位系统中," long"长度为4个字节。但是当我们以64位模式构建我们的项目时,我们注意到" long"占用8个字节。由于我们需要4字节长的类型,我们使用" int"并确认它确实是4字节长。我们希望我们的代码可以无缝运行。
但不幸的是没有,即使"长"在32位模式和" int"在64位模式下,两个都是4字节长,我们的代码失败了。
有人可以告诉我们,如果" long"之间存在差异(布局或其他方面)在32位模式和" int"在64位模式?即使两个都是4字节长?
答案 0 :(得分:1)
如果您需要特定于字节长度的数据类型,请从cstdint
查看int32_t
和uint32_t
保证类型为给定长度,有符号和无符号。
答案 1 :(得分:1)
谢谢大家。问题是我们的代码本地/特定的问题,我们假设指针总是4字节长。当我们取消引用它们时,我们将它们转换为4字节变量并且正在失去精度。这导致了崩溃。由于这是许多人多年来开发的大型代码库,因此有很多遗留代码都有这些假设,我不得不重复所有指针并修改它们。最后,我们已成功将代码移植到64位模式。
答案 2 :(得分:0)
看看这个 - Size guarantees in C++。内置类型(int,long等)满足一些最小尺寸,但每个系统上不需要4个字节。您可以使用固定宽度类型(如dwcanillas的评论中所述)。