【发布时间】:2015-05-31 01:54:53
【问题描述】:
我正在将我们的 Linux C++ 项目从 32 位移植到 64 位。
在我们的 32 位系统中,“long”是 4 字节长。但是当我们以 64 位模式构建项目时,我们注意到“long”占用了 8 个字节。由于我们需要 4 字节长类型,我们使用“int”并确认它确实是 4 字节长。我们希望我们的代码能够无缝运行。
但不幸的是,即使 32 位模式中的“long”和 64 位模式中的“int”都是 4 字节长,我们的代码也失败了。
如果 32 位模式下的“long”和 64 位模式下的“int”有区别(布局或其他方面),有人可以告诉我们吗?即使两者都是 4 字节长?
- 机器:Linux x86_64
- 操作系统:CentOS 6.6
- GCC:4.9.2
【问题讨论】:
-
我不确定你的问题,但你有什么理由不能使用fixed width types?
-
您遇到了什么样的故障?
-
我们也试过了。我们需要一个 64 位模式下的 4 字节长类型,我们尝试了 uint32_t。无论底层模式如何(32 位与 64 位),我们的代码都需要 4 字节类型。但不幸的是,同样的代码块失败得很厉害。该代码中没有其他内容,只有一些按位运算符,并且该代码在 32 位模式下完美运行。
-
按位移位操作失败并在 64 位模式下返回不正确的结果(具有 4 字节长的“uint32_t”和“int”)。
-
回答您帖子中的问题。不,您的代码中某处存在错误。
标签: c++ linux 64-bit size porting