【问题标题】:How do you write code that is both 32 bit and 64 bit compatible?如何编写同时兼容 32 位和 64 位的代码?
【发布时间】:2010-09-07 03:32:06
【问题描述】:

如果我希望我的代码在 32 位和 64 位平台上都能正常运行,我需要考虑哪些因素?

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

【问题讨论】:

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


    【解决方案1】:

    选项:

    使用Virtual Machine(例如Java)以某种语言对其进行编码

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

    【讨论】:

      【解决方案2】:

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

      或者选择一种解释语言。

      您还有其他需求,例如调用现有代码或库吗?

      【讨论】:

        【解决方案3】:

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

        mozilla guidelinesC faq 是很好的起点

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            最重要的是确保不要将指针放入 32 位存储位置。

            但是对于这个问题,确实没有正确的“语言不可知论”答案。如果您将自己限制在标准的“C”或“C++”之类的东西上,您甚至无法得到一个特别明确的答案——数据存储、指针等的大小都非常依赖于实现。

            【讨论】:

              【解决方案6】:

              老实说,这取决于语言,因为 C# 和 Java 等托管语言或 JavaScript、Python 或 PHP 等脚本语言都被锁定在他们当前的方法中,并且要开始并做任何超出高级内容的事情,没有太多担心。

              但我猜你问的是像 C++、C 和其他低级语言这样的语言。

              您最需要担心的是事物的大小,因为在 32 位世界中,您受限于 2^32 的幂,而在 64 位世界中,事物会变得更大 2^64。

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

              【讨论】:

                【解决方案7】:

                在 C(可能还有 C++)中,在计算 malloc 的缓冲区大小时,请务必记住使用 sizeof 运算符。这样一来,您将编写更多可移植的代码,这将自动考虑 64 位数据类型。

                【讨论】:

                  【解决方案8】:

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

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

                  【讨论】:

                    【解决方案9】:

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

                    这就是为什么这么多程序员在他们最可移植的程序中使用 typedef 的原因——如果你希望你的代码在从 8 位处理器到 64 位处理器的所有东西上工作,你需要认识到,无论如何,在 C 中,int 没有严格定义.

                    指针是另一个需要小心的地方——如果你在摆弄指针的数值,不要使用 long、long long 或任何特定类型——使用正确的构造,不幸的是,它因编译器而异到编译器(这就是为什么你为每个你使用的编译器都有一个单独的 typedef.h 文件)。

                    -亚当·戴维斯

                    【讨论】:

                      猜你喜欢
                      • 2021-02-08
                      • 2023-03-30
                      • 1970-01-01
                      • 2013-02-06
                      • 2013-03-12
                      • 1970-01-01
                      • 2010-10-21
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多