解释型语言感想

今天突然想到 解释型语言(Java python)这些语言是如何 解释执行的呢。
毕竟C语言是直接编译成机器码 直接对应的是 CUP的指令集
cpu架构-指令集-编译器-程序 环环相扣,紧密联系。所以你就会听到说Windows操作系统只能够运行在X86架构的CPU上,不能运行在Power 或 ARM 上,因为指令集不同,又所以就有了“Wintel”联盟。所以你也可以看到有的编译器是有硬件厂家提供的,比如Intel就提供C和C++的编译器,这样编译出来的程序就能更好的利用硬件的性能。那为什么又会听到 linux可以运行在不同架构的CPU上呢?那是因为linux是开源的,因此就可以将它移植到不同的CPU平台上,然后在用相应的编译器编译,就得到了可以在该CPU上运行的二进制代码了。而Windows是封闭的,得不到源代码,而MS自己又没有移植到别的CPU平台上的打算,所以当然就只能在X86上运行了。(BTW,X86也是性能最好的CPU之一,而Windows对性能要求较高,所以MS当然也就不愿意移植了)
回头在看解释型语言 的 解释器功能是把他们的 对应的字节码 翻译成机器码。
那机器码是如何传递给CPU的呢。如下C语言就内嵌了机器码 把机器码存在内存里面就行了,调用一下当成函数地址就OK了
所以反思的到 解释型语言也是这么干的吧。

下面数组的机器码其实就是反汇编之后的找到的一个函数代码
#include <stdio.h>

const unsigned char uBinCode[] = {

0x55,

0x89,0xE5,

0x8B,0x45,0x0C,

0x8B,0x55,0x08,

0x01,0xD0,

0x5D,

0xC3,

};
int main(int argc, char argv[]) {
printf(“1 + 1 = %d\n”,((int (
)(int,int))uBinCode)(1,1));

printf(“5 + 5 = %d\n”,((int (*)(int,int))uBinCode)(5,5));

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值