提前编译代码和本机编译代码之间有什么区别

时间:2009-07-22 01:13:54

标签: iphone mono native aot

我在Miguel de Icaza的一些写作中提到了使用mono制作iphone应用程序的提前编辑(aot)。这听起来像是本机代码的结果。 是这样还是有什么区别?

3 个答案:

答案 0 :(得分:5)

当你使用aot = full(仅在几个平台上支持)时,在运行时不会有任何代码被JIT。

但是您仍然需要运行时来提供应用程序使用的许多功能。 Mono的运行时包括对垃圾收集,线程管理,IO层,IOremapping层,操作系统接口,对十进制类型的支持,反射的支持(所以你仍然可以做类似于.GetMethods()的事情)

答案 1 :(得分:2)

AOT编译是,Mono将在程序运行之前将方法编译为本机代码。你可以阅读它here

答案 2 :(得分:2)

是的,结果是本机代码,但在基本的AOT版本中,仍然需要Mono运行时才能执行。

“iPhone上的Mono”场景中发生的事情有点复杂。首先,使用Mono Linker修剪托管库。然后使用mono --aot=full将结果编译为本机代码。最后,所有这些都传递给mkbundle以将其打包成单个可执行文件,包括Mono运行时。

如果您只想在不安装Microsoft .Net / Mono的情况下运行.Net应用程序,那么只需使用mkbundle。