我这里有两个问题:
我知道C++创建的EXE文件运行速度比VB快得多,但为什么呢?编译后不都变成机器码了吗?
如果C++被编译成机器代码,为什么它依赖于操作系统。例如,为什么不能在 Linux 上运行编译后的输出?如果它与库(如 stdio.h)有关,它们不是也会转换为机器语言吗?
虽然 C++ 确实被编译为机器代码,但 VB(和 C#)却不是。VB(以及 C# 和其他 .NET 语言)被编译为所谓的 MSIL(微软中间语言),它是虚拟理想机的机器代码。虚拟机的机器代码通常称为“字节码”。这些指令由 CLR(公共语言运行时)即时编译为实际的机器代码(JIT(即时)编译)。这样做的结果实际上是 VB 程序可以在几乎任何机器上运行,而无需多次编译。它运行速度较慢(稍微),因为它需要 JIT,但是大多数性能问题在过去十年左右已经得到解决,并且 C# 或 VB 总是比 C++ 慢的说法不再正确(不要敲它,直到你尝试一下性能……对于 90% 的应用程序来说,它可能是相同的)。在某些情况下,C# 可能会更快,因为 JIT 编译器在代码运行时会进行一些有趣的优化,而这对于已编译的 C++ 程序来说并不总是可行。总结一下:
由于多种原因,它依赖于操作系统。我将列出一些我认为重要的:
<string>例如),它通常是从共享库加载的(.dll在 Windows 中,.so在 Linux 中)。实际加载库的代码位在操作系统之间差异很大。甚至调用函数的方式也可能有所不同。