通过像在Java中一样在VM中运行,是否可以使C ++平台独立?

时间:2015-12-16 20:47:02

标签: c++ jvm virtual-machine portability

鉴于Java具有高度可移植性并且没有严重的开销,C ++不能独立于平台吗?

3 个答案:

答案 0 :(得分:1)

是的,这是完全可能的。例如,您可以将C ++编译为JavaScript(请参阅https://softwareengineering.stackexchange.com/questions/197940/how-to-run-c-code-in-browser-using-asm-js)或CLI字节代码(https://en.wikipedia.org/wiki/C%2B%2B/CLI)以在Windows或Linux或其他各种目标上运行。

这些目前的功能都不如本机C ++,并且大多数都无法直接访问操作系统资源。因此,可移植性需要付出一些代价,通常如果您想支付定位Web浏览器或CLI的成本,您可以使用更适合这些平台的语言。

答案 1 :(得分:0)

实际上,代码执行的方法(代码是否被编译,解释,由VM运行等)更多地是实现的属性,而不是语言。

当人们说C ++是一种编译语言并且JavaScript是一种解释型语言时,这并不一定意味着您不能编写将JavaScript代码转换为您选择的硬件上的机器代码的编译器,而是是为所述语言提供实现的常用方法。

在实践中,使用C ++是因为它的效率和接近金属功能,是嵌入式系统编程,系统编程,图形等性能关键任务的理想选择,因此让C ++在VM中运行会失败它的目的。 有点像买一个鱼片牛排,并在微波炉中烹饪。

答案 2 :(得分:0)

Java编译为一个独立于平台的中间字节代码,然后由运行时由特定于平台的JVM解释。这就是允许Java可移植的原因。每种类型的JVM都经过定制,可以在平台的特定硬件架构上运行字节代码。

C / C ++编译为直接在CPU上运行的本机机器代码(或直接在OS允许的情况下运行)。所以不,你不能以独立于平台的方式编译C / C ++。您必须使用特定于平台的编译器为您要运行代码的每个硬件体系结构编译C / C ++代码。