你如何编写32位和64位兼容的代码?

时间:2008-08-28 15:12:15

标签: language-agnostic compatibility 32bit-64bit

如果我希望我的代码在32位和64位平台上正确运行,我需要做些什么考虑?

编辑:我需要注意哪些方面,例如打印字符串/字符或使用结构?

9 个答案:

答案 0 :(得分:2)

选项:

使用Virtual Machine(例如Java)

以某种语言对其进行编码

在.NET中对其进行编码,并且不针对任何特定的体系结构。在运行之前,.NET JIT compiler会将它编译为正确的架构。

答案 1 :(得分:1)

一个解决方案是针对在两个平台上运行的虚拟环境(我在想Java或.Net)。

或选择解释性语言。

您是否有其他要求,例如调用现有代码或库?

答案 2 :(得分:1)

你应该一直在做同样的事情,以确保你编写可移植的代码:)

mozilla guidelinesC faq是很好的起点

答案 3 :(得分:0)

我假设你还在为每个平台单独讨论编译它们?只需创建一个32位二进制文​​件就可以完全运行它们。

答案 4 :(得分:0)

最大的一个是确保不将指针放入32位存储位置。

但是,对于这个问题,没有正确的“语言无关”答案。如果你限制自己使用标准的“C”或“C ++”之类的东西,你甚至无法获得特别坚定的答案 - 数据存储,指针等的大小都非常依赖于实现。

答案 5 :(得分:0)

它实际上取决于语言,因为像C#和Java这样的托管语言或者像JavaScript,Python或PHP这样的脚本语言都被锁定在他们当前的方法中,并且开始并且除了高级内容以外的任何事情都没有多少担心。

但我的猜测是你在询问C ++,C和其他低级语言等语言。

你必须担心的最重要的事情是事物的大小,因为在32位的世界中你被限制在2 ^ 32的能力,但是在64位的世界里,事情变得更大2 ^ 64。

使用64位,RAM中的内存和存储空间更大,您可以计算更大的数字。但是,如果您知道正在编译32和64,则需要确保将系统的期望限制在32位世界以及缓冲区和数字的限制。

答案 6 :(得分:0)

在C(也许是C ++)中,总是记得在计算malloc的缓冲区大小时使用sizeof运算符。这样,无论如何你都会编写更多的可移植代码,这将自动考虑64位数据类型。

答案 7 :(得分:0)

在大多数情况下,您唯一需要做的就是为两个平台编译代码。 (而且假设您使用的是编译语言;如果不是,那么您可能不需要担心任何事情。)

我能想到的唯一可能导致问题的是假设数据类型的大小,这是你可能不应该做的事情。当然,任何用汇编写的东西都会引起问题。

答案 8 :(得分:0)

请记住,许多编译器根据底层架构选择整数的大小,因为“int”应该是系统中最快的数字操纵器(根据一些理论)。

这就是为什么如此多的程序员将typedef用于他们最便携的程序的原因 - 如果你希望你的代码可以处理从8位处理器到64位处理器的所有内容,你需要认识到,无论如何,int并没有严格定义

指针是另一个需要注意的方面 - 如果你正在摆弄指针的数值,请不要使用long,long long或任何特定类型 - 使用正确的构造,不幸的是,它与编译器不同到编译器(这就是你为每个编译器使用一个单独的typedef.h文件的原因。)

-Adam Davis