Language agnostic 编写基于x64的应用程序。真的有什么意义吗?

Language agnostic 编写基于x64的应用程序。真的有什么意义吗?,language-agnostic,64-bit,32bit-64bit,Language Agnostic,64 Bit,32bit 64bit,显然,与32位相比,它可能有一些(或许多)优势,但我显然没有意识到。那么,它们是什么 我只是不明白,X64 PC上仍然不支持这么多东西。例如,在Internet Explorer 8和9上,64位版本不支持Flash,当我设法让它工作时,它就会停止工作,然后出现一条消息,告诉我64位IE当前不支持Flash,或者64位浏览器上不支持Flash 我现在有一台装有Windows7的64位pc,并且仍在编写32位应用程序,它们都工作得很好(这里和那里都有一些bug,无论你使用的是32/64位,都会出现

显然,与32位相比,它可能有一些(或许多)优势,但我显然没有意识到。那么,它们是什么

我只是不明白,X64 PC上仍然不支持这么多东西。例如,在Internet Explorer 8和9上,64位版本不支持Flash,当我设法让它工作时,它就会停止工作,然后出现一条消息,告诉我64位IE当前不支持Flash,或者64位浏览器上不支持Flash


我现在有一台装有Windows7的64位pc,并且仍在编写32位应用程序,它们都工作得很好(这里和那里都有一些bug,无论你使用的是32/64位,都会出现这些bug)。为什么要开发64位系统?我看不出它们有什么不同,如果我想了解更多关于64位开发的知识,您建议我从哪里开始?

64位软件可以直接寻址超过4GB的内存(实际上限制为~3GB),并且它使用现代CPU上可用的额外硬件(额外寄存器等),从而提高性能。这是迁移到64位的两个主要原因


通常你会开发跨平台的软件,你的编译器会负责使用所有的64位功能。

这取决于你在做什么

如果您正在编写一个独立的应用程序,它不与其他任何东西通信,不需要大量内存,也不会从x64提供的额外寄存器中获益,那么您将不会从制作x64版本中获得太多(除了臃肿的结构大小:)

OTOH,对于在进程中运行的代码,x64有点像病毒。外壳本身现在是64位的,所以如果你想插入它,你也必须是64位的。(或者至少提供一个可以与64位世界对话的适配器。)因此,将所有内容编译为64位通常更容易,因此您不需要在两个世界之间编组调用

(当然,对于32位操作系统,仍然有一个32位构建。)


编辑:忘了说,如果您想显示机器的“真实”视图,那么以x64为目标也很有用。出于兼容性的原因,64位Windows对32位进程的各种内容“撒谎”。您可以禁用/绕过谎言,但在不破坏东西(如第三方DLL)的情况下禁用/绕过谎言可能很棘手,最好避免使用。

64位应用程序最常见的原因是访问更多内存。举个明显的例子,当数据库服务器处理的大部分(或全部)数据都在内存中而不是存储在磁盘上时,数据库服务器可以获得巨大的好处

您还可以获得额外的速度,特别是对于浮点密集型应用程序(我经常看到3倍的速度提升,尽管它在某种程度上也取决于CPU)


然而,其他一些应用程序通过移动到64位,几乎得不到甚至失去了一些。CPU到内存的带宽仍然相同,但所有指针的大小都是原来的两倍,因此如果大量使用指针,可能会导致净损失。

据我所知,限制是2GB内核空间和2GB用户空间,除非使用像arcana这样的286,如地址窗口。FWIW,您可以设置“大地址感知”在EXE上标记以将其扩展到3GB,但只有冒着第三方DLL(当然也可能是您自己的代码)的风险,更危险的是,如果驱动程序错误地将地址解释为已签名的地址,他们会发疯(这些值特定于Windows,其他操作系统没有此限制(尽管它们可能有其他限制)。IIRC Intel CPU的直接寻址内存硬限制为1TB,AMD限制为256TB(两者都远小于完整的64位内存空间)。谢谢@Jerry,这非常有帮助。