提前编译的代码和本机编译的代码有什么区别
我在 Miguel de Icaza 撰写的一些有关使用 Mono 为 iphone 生成应用程序的文章中遇到了提前 (aot) 编译。 听起来结果是本机代码。 是这样还是有什么区别?
i came across ahead-of-time (aot) compilation in some writing by Miguel de Icaza about producing applications for iphone using mono. It sounds like what results is native code.
Is this so or what is the difference?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当您使用 aot=full (仅在少数平台上支持)时,不会在运行时对任何代码进行 JIT 处理。
但您仍然需要运行时来提供应用程序使用的许多功能。 Mono 的运行时包括对垃圾收集、线程管理、IO 层、IOremapping 层、操作系统接口、十进制类型支持、反射的支持(因此您仍然可以执行 type.GetMethods () 等操作) 。
When you use aot=full (only supported on a few platforms) then no code will be JITed at runtime.
But you still require a runtime to provide many of the features that your application uses. Mono's runtime includes support for garbage collection, thread management, the IO-layer, the IOremapping layer, the interface to the operating system, support for the decimal type, reflection (so you can still do things like type.GetMethods () for example).
AOT编译是指,Mono会在程序运行之前将方法编译为本机代码。 您可以在此处阅读相关内容
AOT compilation is that, Mono will compile methods to native code before the program is run. You can read about it here
是的,结果是本机代码,但在基本 AOT 版本中,这仍然需要 Mono 运行时来执行。
“iPhone 上的 Mono”场景中发生的情况要复杂一些。 首先,使用 Mono Linker 修剪托管库。 然后使用
mono --aot=full
。 最后,所有这些都被传递到 mkbundle 将其打包到单个可执行文件中,包括单声道运行时。如果您只想运行 .Net 应用程序而不安装 Microsoft .Net / Mono,那么只需使用 mkbundle 即可。
Yes, the result is native code, but in the basic AOT version this still needs the Mono runtime to execute.
What happens in the "Mono on iPhone" scenario is a bit more complex. First, the managed libraries are trimmed using Mono Linker. Then the result is compiled to native code with
mono --aot=full
. Finally, all this is passed to mkbundle to pack it into a single executable, including the Mono runtime.If you just want to run .Net applications without installing Microsoft .Net / Mono, then just use mkbundle.