如果我希望我的代码在32位和64位平台上正确运行,我需要做些什么考虑?
编辑:我需要注意哪些方面,例如打印字符串/字符或使用结构?
答案 0 :(得分:2)
选项:
使用Virtual Machine(例如Java)
以某种语言对其进行编码在.NET中对其进行编码,并且不针对任何特定的体系结构。在运行之前,.NET JIT compiler会将它编译为正确的架构。
答案 1 :(得分:1)
一个解决方案是针对在两个平台上运行的虚拟环境(我在想Java或.Net)。
或选择解释性语言。
您是否有其他要求,例如调用现有代码或库?
答案 2 :(得分:1)
你应该一直在做同样的事情,以确保你编写可移植的代码:)
mozilla guidelines和C 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