是否有充分的理由提供针对现代台式机的任何32位版本以及64位版本的任何软件,这些台式机在64位硬件上运行现代64位操作系统?
看来64位软件会更高效,并在需要时允许更高的内存使用率,等等。Apple甚至在手机上使用64位处理器,即使它们只有1-2 GB RAM,也远低于4 GB。 32位CPU的限制。
是否有充分的理由提供针对现代台式机的任何32位版本以及64位版本的任何软件,这些台式机在64位硬件上运行现代64位操作系统?
看来64位软件会更高效,并在需要时允许更高的内存使用率,等等。Apple甚至在手机上使用64位处理器,即使它们只有1-2 GB RAM,也远低于4 GB。 32位CPU的限制。
Answers:
除非在这里比较非常具体的CPU架构,操作系统和库基础结构,否则我将无法进一步详细介绍。
32位软件和64位软件之间的区别在于指针的大小,也可能是整数寄存器的大小。而已。
这意味着程序中的所有指针的大小都是其两倍。而且(至少在ILP32 / LP64架构上)long
的大小也是其两倍。这通常会使目标代码大小增加大约30%。这意味着 …
这对性能有不可忽略的负面影响。
仅当您可以以某种方式“回购”这些性能成本时,这样做才有意义。基本上,有两种方法可以执行此操作:您需要执行很多64位整数数学运算,或者需要4个以上的GiByte映射内存。如果其中一个或两个都正确,那么使用64位软件是有意义的,否则就不行。
注意:在某些架构中,没有相应的32位或64位变体。在那种情况下,这个问题显然是没有道理的。最著名的是IA64(仅64位,没有32位变体),以及x86 / AMD64,尽管它们之间有着密切的联系,但它们的体系结构密切相关,其中x86仅32位,AMD64仅64位。
实际上,后一个陈述不再是100%正确的。Linux最近添加了x32 ABI,它允许您使用32位指针运行AMD64代码,因此,即使这不是“适当的” CPU架构,它也是一种使用AMD64架构的方式,就好像它具有本机一样。 32位变体。这正是做,因为我上面提到的性能开销是造成真正在现实世界的系统上运行的实际代码现实世界的用户可衡量的,可量化的问题。
如果软件需要直接与旧版系统,驱动程序或库连接,则您可能需要提供32位版本,因为AFAIK操作系统通常(绝对是Windows和Linux AFAIK)不允许将64位和32位混合使用进程中的位代码。
例如,如果您的软件需要访问专用硬件,那么客户使用只有32位驱动程序可用的旧型号的情况并不少见。
如果您的软件是DLL,则必须同时提供32位和64位版本。您不知道客户将使用32位还是64位软件与DLL进行通信,并且DLL必须使用与应用程序相同的位长。这是不可谈判的。
如果您的软件是独立的可执行文件,则不太清楚。如果不需要在较早的操作系统上运行软件,则可能不需要提供32位版本。只需坚持使用64位,指定它需要64位操作系统即可完成工作。
但是,如果确实需要在较早的OS上运行软件,则可能不希望提供64位版本。如果您有两个版本,那么您将进行两次测试,并且跨各种OS版本和语言正确测试软件并不是一个快速过程。由于32位软件可以在64位平台上完美地运行,因此软件仅以32位版本发行仍然很普遍,尤其是对于较小的开发人员。
另请注意,大多数手机都是32位的。也许现在有些高端的是64位的,但是没有什么令人信服的理由采取这一步骤。因此,如果您正在开发跨平台并且可能希望您的代码也可以在Android上运行,那么保持32位是一个安全的选择。