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