在此同时,MinGW也具有64位内联汇编语言,而且速度相当快且免费。它曾经在某些数学方面速度很慢,所以我会先比较MSVC和MinGW的性能,看看它是否适合您的应用程序作为一个合理的起点。
此外,手写的汇编语言是否更慢:
1.实际上,人类经常编写比编译器运行更高效的汇编代码——或者至少在我学习编程的70年代和80年代时是普遍的智慧,并且一直延续到2000年左右。
2.你总是可以在“C”或C++中编写代码,将其编译成汇编语言,并进行调整以查看是否可以改进它。这样,您就可以从优化中学习,
然后看看您是否可以改进它们。
无论M\$说什么,汇编都非常适合需要高度优化的代码。除非你尝试过,否则你不会真正知道汇编是否会加速代码。其他一切都只是空话。
与上述情况类似,我更喜欢将c++代码编译成汇编语言,然后进行手工优化。这样可以节省大量编写代码的麻烦;通过一些实验,您可能会得到一个测试速度更快的东西。对于现代程序,我从未需要这样做过。通常,其他事情可以使它运行得更快-例如多线程、使用查找表、将时间消耗昂贵的操作移出循环、使用静态分析器、使用实时分析器(例如Valgrind(如果您在Linux上)等)。但是,对于性能关键的应用程序,我认为没有理由不去尝试;并且如果工作正常,就使用它。M$只是因为放弃了内联汇编而变得懒惰。
至于64位或32位哪个更快,这类似于16位与32位之间的情况。更宽的带宽可以更快地传输大量数据。如果两者都在64位操作系统上运行,则它们以完全相同的时钟速度运行;因此,32位程序不应该更快。然而,我观察到32位Win7上的CPU时钟略微快于64位Win7。因此,对于相同数量的线程和更高的CPU密集型操作,32位Win7上的32位应用程序将更快。但是,差异不大;并且64位指令确实可以有所改变。但是,给定的用户只会安装一个操作系统;因此,在该操作系统上,64位应用程序将更快;或者在64位操作系统上运行32位应用程序时至少具有相同的速度。然而,它将是更大的下载。您最好选择可能更快的64位速度;除非您处理知道不会移动大量数据的代码的专用系统。
另外,请注意,我在各自大小的操作系统上使用相应版本的MinGW对64位和32位应用程序进行了基准测试。它执行了大量64位浮点数计算,我确信64位版本会更好。但实际情况并非如此!我的猜测是,在内置数学协处理器中,浮点寄存器在两个操作系统上以相等数量的时钟周期运行,而且在64位Win7上可能会稍微慢一些。我的基准测试在两个版本中非常接近,没有一个明显快于另一个。也许长时间的数值计算操作在64位上比较慢,但64位程序代码运行速度稍快-导致结果几乎相等。
基本上,只有在您认为自己可能拥有一个在32位操作系统上运行得更快的内部应用程序时,或者您需要一个非常小的可执行文件或者您正在向32位操作系统机器上的用户交付产品(许多开发人员仍然提供两个版本),或者一个32位嵌入式系统时,32位才有意义。
编辑反映了我的某些评论与Win7 x86 vs. x64的特定经验有关。