C能不能跨平台,而java为什么可以?

C语言:可以说是也不是

计算机识别0和1,有些代表指令(有固定含义和编码),是芯片能识别的;另一些是数据,不同程序数据不同。

 

汇编的由来:比如“+”,是cpu的可识别的固定编码(比如0xa90dff,随便写的),为了方便书写和记忆,用助记符add表示,这就是汇编的由来。

 

高级语言:随着程序规模变大,汇编台式太复杂,于是有了高级语言,比如C。

 

编译过程:高级语言->汇编语言->二进制。

 

指令集:那些类似add之类的助记符,以及汇编的语法格式,称之为指令集。

 

关键所在:不同公司生产的cpu,指令集不同。没有统一的标准。甚至像intel所代表的复杂指令集,和arm为代表的精简指令集,它们指令集的设计思路就是不一样的。

 

所以:

1.C是源码可移植性的。因为操作系统就是C写的,C的语义通常能靠硬件及操作系统直接支持的功能实现。前提是必须使用C标准库函数。而且C中有许多东西与平台相关,最简单的比如表示int有的用16位,有的用32位。所以要针对不同平台做不同处理,比如条件编译。

2.C编译结果不可夸平台。因不同平台编译的二进制文件都不同。

 

java:

平台无关性:java源文件编译成.class文件,可以在任何平台的jvm上运行。

语言无关性:其他语言也可以开发对应的编译器,编译成.class文件,跑在jvm上。

像Clojure、Groovy、JRuby、Jython、Scala等语言都可以。

 

.net:CLR有点类似于jvm,#、F#、VB.NET、C++、Python等几十种语言也可以运行在CLR上。

 

 

参考:https://www.cnblogs.com/jmsjh/p/7808764.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值