有大量的司机和64位不可用的着名应用程序。例如,Adobe不为Internet Explorer提供64位Flash播放器插件。正因为如此,即使我运行的是64位Vista,我也必须运行32位IE。 Microsoft Office,Visual Studio也不提供64位AFAIK。
就个人而言,我在使用64位构建应用程序时没有遇到太多问题。我只需要记住一些经验法则,例如:对于字符串长度等,总是使用SIZE_T而不是UINT32。
所以我的问题是,是什么阻止人们为64位构建?
答案 0 :(得分:16)
如果从头开始,64位编程就不那么难了。但是,你提到的所有程序都不是新的。
从头开始构建64位应用程序要容易得多,而不是从现有代码库中移植它。移植时有很多问题,尤其是当您进入已经完成某种程度优化的应用程序时。程序员使用许多小的假设来获得速度,并且这些并不总是很容易快速移植到64位。我必须处理的几个例子:
long
整数的长度发生变化,因此如果将套接字上的值传递给另一个可能不是64位的程序,则需要重构代码答案 1 :(得分:5)
除了@jvasak's post中的内容之外,还有可能导致错误的主要内容:
请记住,Windows甚至不允许应用程序(无论是32位还是64位)处理地址大于0x7FFFFFFF(2GB或更高)的指针,除非它们被特别标记为"LARGE_ADDRESS_AWARE"
,因为这样做许多应用程序会在某个时刻将指针视为负值并反复使用。
答案 2 :(得分:5)
我将C / C ++代码移植到64位的最大问题是来自第三方库的支持。例如。目前只有32位版本的Lotus Notes API以及MAPI,因此您甚至无法链接它们。
此外,由于无法将64位DLL加载到64位进程中,因此再次尝试动态加载动作。我们再次尝试在64位下支持Microsoft Access遇到此问题。来自维基百科:
Jet数据库引擎将保留 在可预见的未来32位。 微软没有本土计划 在64位版本下支持Jet 视窗
答案 3 :(得分:3)
只是一个猜测,但我认为其中很大一部分将是支持 - 如果Adobe编译64位版本,他们必须支持它。即使它可能是一个简单的编译开关,他们仍然需要经过大量的测试等,然后培训他们的支持人员正确响应,当他们遇到问题修复它们或者导致新版本的32位二进制文件或代码中的一个分支,等等。因此,虽然看起来很简单,但对于大型应用程序来说,它仍然会花费很多。
答案 4 :(得分:3)
许多公司没有完成创建64位版本的努力的另一个原因是他们根本不需要。
Windows有WoW64(Windows 64位上的Windows),Linux可以在64位下提供32位库。这两种方法都允许我们在64位环境中运行32位应用程序。
只要软件能够以这种方式运行,就没有转换为64位的主要动机。
例外情况是设备驱动程序,因为它们与操作系统的关系更深,并且无法在基于x86-64 / AMD64的64位操作系统提供的32位层中运行(IA64无法执行此操作)根据我的理解这一点。
我同意你对Flash播放器的看法,我对Adobe非常失望,他们没有更新此产品。正如您所指出的,它在64位中无法正常运行,需要您运行32位版本的Internet Explorer。
我认为这是Adobe的一个战略性错误。必须为闪存播放器运行32位浏览器对用户来说是一个不便,许多人不会理解这个解决方案。这可能会导致开发人员对使用闪存感到担忧。对于网站来说,最重要的是确保每个人都可以查看它,疏远用户的解决方案通常不受欢迎。 Flash的受欢迎程度取决于它自己的受欢迎程度,使用它的站点越多,用户在系统上拥有的用户就越多,在系统上拥有它的用户就越多,站点就越愿意使用它。
零售市场将这些事情推向前进,当一般消费者购买新电脑时,他们不会知道他们不需要64位操作系统他们会得到它,因为他们听到它是最新最好的东西,计算的未来,或者只是因为他们不知道差异。
Vista已经推出了大约2年,之前Windows XP 64位已经推出。在我看来,如果他们想要坚持自己的市场,那么像Flash这样的主要技术就不会升级太久了。它可能与Adobe接管Macromedia有关,这表明Adobe并不认为Flash是他们未来的一部分,我觉得很难相信,因为我认为Flash和Dreamweaver是他们从Macromedia获得的最重要的部分,但为什么他们还没有更新呢?答案 5 :(得分:2)
这并不像在编译器上翻转开关那么简单。至少,如果你想做得对,那就不行了。最明显的例子是你需要使用64位数据类型声明所有指针。如果您有任何代码可以对这些指针的大小进行假设(例如,每个指针分配4个字节内存的数据类型),则需要对其进行更改。所有这些都需要在您使用的任何库中完成。此外,如果你只错过了几个,那么你最终会得到指针下降并位于错误的位置。指针不是唯一的粘性点,但肯定是最明显的。
答案 6 :(得分:1)
主要是支持和质量保证问题。对于大多数代码而言,为64位构建的工程工作相当简单,但是测试工作和支持成本不会以相同的方式缩小。
在测试方面,你仍然必须运行所有相同的测试,即使你“知道”它们应该通过。
对于很多应用程序,转换为64位内存模型实际上并没有带来任何好处(因为它们从不需要超过几GB的RAM),并且由于指针较大,实际上可能会使速度变慢size(使每个对象字段大两倍)。
再加上缺乏需求(由于鸡/蛋问题),你可以看出为什么对大多数开发者来说不值得。
答案 7 :(得分:0)
他们的Linux/Flash blog在一定程度上解释了为什么还没有64位Flash Player。有些是特定于Linux的,有些则不是。