如何编译c / c#/ java不同?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何编译c / c#/ java不同?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1838字,纯文字阅读大概需要3分钟。
内容图文
![如何编译c / c#/ java不同?](/upload/InfoBanner/zyjiaocheng/821/f74c35a3ca5f44e8be5187d63a7f8853.jpg)
我试图理解这些语言是如何工作的.不幸的是,我只读过非常肤浅的东西.
我将总结我已经知道的内容,如果你能纠正我,我会很高兴,最重要的是,帮助我提高我的一点半知识.
C :
C编译器预处理所有源文件.这意味着它实际上将字符串插入到最初位于宏的位置.之后,它为包含机器独立字节码的每个源文件创建一个.obj文件.
然后,链接器将库中的所有外部.obj文件与定制的.obj文件链接在一起,并将其编译为.exe.
Java的:
Java代码被编译成机器独立的“字节码”,它位于.class文件中,而后者又可以放在.JAR文件中,这些文件可以在JRE上运行.虚拟机正在进行垃圾清理. Java代码就像C#一样及时编译,但是由SUN开发的热点优化.
C#:
几乎和Java一样? C#源代码被编译成CIL(通用中间语言)代码,这仍然是人类可读的.此代码将由CLR Just-in-Time运行.这种编译只是在首次调用时将方法转换为机器特定的代码.
我实际上对几乎所有语言都很感兴趣……但Java和C#几乎是一样的,我总是想知道如何区分.可以说,C是“经典”.两个父亲都没有任何虚拟机.感谢帮助!
编辑:我知道这是一个广泛的主题,但我真的找不到任何扎实的知识.如果你有解释这类事情的链接或书籍,我很乐意去上班.我试着阅读java虚拟机的SUN规范/白皮书,但现在这对我来说有点太深了.
解决方法:
非托管C的编译与托管C,C#和Java的编译有很大不同.
不受管理的C.
非托管C(“传统”C)直接编译为机器代码.程序员调用针对特定平台(处理器和操作系统)的编译器,并且编译器输出仅在该平台上有效的可执行文件.可执行文件包含特定处理器可以理解的机器代码.执行时,处理器将按原样直接执行编译的代码(模数虚拟内存地址转换yadda yadda).
托管C,C#和Java
托管代码被编译成中间代码(在C#等.NET语言的情况下为CIL,在Java的情况下为Java字节代码).编译器输出包含此中间语言代码的可执行文件.此时,它仍然是平台无关的.执行时,所谓的Just-in-Time编译器将启动,在执行之前将中间代码转换为机器代码.然后,处理器将执行JIT编译器生成的机器代码.大多数情况下,这个机器代码保存在内存中并在程序结束时丢弃(因此下次必须再次运行JITting),但是存在永久执行JITting的工具.
这里的好处当然是独立于平台的可执行文件可以在任何平台上运行,但缺点是您需要该平台的执行环境(包括JIT编译器).
内容总结
以上是互联网集市为您收集整理的如何编译c / c#/ java不同?全部内容,希望文章能够帮你解决如何编译c / c#/ java不同?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。