【问题标题】:Phone 7: how does it execute code?电话 7:它是如何执行代码的?
【发布时间】:2012-01-21 18:09:46
【问题描述】:

不幸的是,Google 并没有给我太多帮助:我正在寻找有关在 Windows Phone 7 上执行应用程序(使用 Phone 7 开发人员工具编写)的一些信息。

  • 是部署到手机的普通 .NET 字节码吗?
  • 如果有,手机上是否有某种 JIT 编译器?

总的来说,我对 Phone 7 如何执行程序以及与 Android 或 IOS 的概念是否存在差异感兴趣。

谢谢

【问题讨论】:

    标签: c# .net windows-phone-7 mobile


    【解决方案1】:

    是部署到手机的普通 .NET 字节码吗?

    是的。

    如果是,手机上是否有某种 JIT 编译器?

    是的,它包含在 CLR 中。它是在手机上运行的桌面 CLR 的移动版本,但原理完全相同。 JITer 在运行时将 MSIL 代码转换为本机代码。

    Android 支持本机代码和托管代码。如果使用 Java 托管代码,则在运行时会发生虚拟机和字节码进程编译。

    iPhone 的 Objective-C 不同,因为它已经是不需要进一步编译的本机代码。

    【讨论】:

    • 哇,太快了,谢谢。所以我假设 Android 做同样的事情(某种 Java 字节码 + dalvik vm)。我想知道的最后一件事是与IOS的比较。我知道它是 IOS 上的 Objective C,但是这段代码是直接在 iPhone 上运行还是在两者之间也存在某种 Jitting?
    • @alapeno,不,Objective C 不使用即时编译。没有虚拟机。您可以查看一篇有趣的文章:cocoawithlove.com/2010/07/is-virtual-machine-for-cocoa.html
    • Objective C 生成本机代码,因此它不需要任何 VM 即可运行。 Android 也支持原生代码。不幸的是,Windows Phone 7 没有。
    • Android 支持 Native 代码,因为它可以通过使用 JNI 调用进行交互。 Dalvik VM 基本上是一个解释器(目前是 Mterp),它解释 DEX 代码而不是 Java 字节码。 JIT 是一个可选功能,如果找到一个热跟踪,不管你相信与否,它只会在 40 次迭代中变热(它的硬编码 - 如果你想编译自己的版本,你可以更改它)。 Dalvik 也支持基于热方法的 JIT,但效率不高。
    【解决方案2】:

    如果您熟悉代码是如何在 Windows 机器上执行的,Windows Phone 非常相似。

    iOS 实际上是不同的。它不允许 JIT 编译。例如,MonoTouch 在运行前预编译应用程序。见Mono Touch Limitations

    【讨论】:

    • 好的,谢谢,这意味着 IOS 应用程序的代码在开发人员机器上编译并在手机上“本地”运行,不需要任何进一步的机制?
    • iOS 的“默认”开发方式实际上是使用编译为本机代码的 Objective-C(对于 C/C++ 语言来说是典型的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2022-10-06
    • 2020-06-06
    相关资源
    最近更新 更多