安基网 首页 编程 软件学院 查看内容

Python是用C实现的,Java是用C++实现的,那为何不直接用C/C++?

2019-9-24 10:42| 投稿: |来自:


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 我们继续向下做个类比。既然C总要经过汇编一层,那为什么有人用C而不是直接用汇编呢?先用汇编函数调用为例子。一个C函数的调用,在C语言里就是一行搞定,指定函数名,传入实参列表,获取返回值即可。但在汇编的层级,则要做如下工作:(1)找到栈地址,将其载入到寄存器(2)将第一个参数入栈(3)将 ...

我们继续向下做个类比。既然C总要经过汇编一层,那为什么有人用C而不是直接用汇编呢?

先用汇编函数调用为例子。一个C函数的调用,在C语言里就是一行搞定,指定函数名,传入实参列表,获取返回值即可。但在汇编的层级,则要做如下工作:

(1)找到栈地址,将其载入到寄存器

(2)将第一个参数入栈

(3)将第二个参数入栈,如下若干参数入栈不表

(4)返回地址入栈

(5)跳转到函数地址开始执行

(6)将返回地址存入寄存器

(7)函数运行结束,将此次调用栈恢复栈顶指针位置,即所有参数被忽略

(8)返回值入栈

(9)跳转到返回地址

再举个嵌入式编程里,中断处理的例子。中断处理是由CPU硬件触发的事件处理。在C语言里只需要按照嵌入式库的规范,编写名称符合要求的函数放那里就行了。当事件发生时,自然后由CPU调用这个函数来处理对应的硬件事件。

而如果用汇编来写,则要这么做:

(1)用符号定义来制定中断处理的入口地址

(2)将中断处理符号地址存入中断向量表

(3)中断发生时,CPU的PC指针跳转到中断处理入口地址

(4)保存所有寄存器到内存

(5)屏蔽其他中断使能开关,避免中断嵌套发生,当然高级玩法也可以用嵌套中断

(6)处理结束,将内存里备份的之前执行序的寄存器内容恢复到寄存器

(7)PC指针跳转到之前执行序的位置

在各种体系结构上,如上过程会有一些区别,但大体含义如此。

那么回到题主的问题,反正底层都是要用汇编的,为何还要用C?另外想要成为一个优秀的、有能力程序员,做软件开发的话,就来学习C语言C++吧!你如果感觉自学C/C++语言有困难的话,我本身是一个C/C++出身的程序员,大家有兴趣可以一起来筘羣学习,C/C++编程学习,七八四一四3133。不管你是转行还是找工作,大家都一起成长进步。无非就是C减少了一些不必要的操作步骤。

因为一些简单的编程范式,比如函数调用,C语言已经帮程序员屏蔽了实现细节,只需要简短的语句就能实现。只需要很短的代码就能实现需求,而非陷入一些不必要的细节里反复纠结。

高级语言如Python/Java也是如此。换句话来说就是提升了我们的开发效率,即使他们并没有C/C++“强大”。

文章转载自丨知乎作者:gashero

链接:https://www.zhihu.com/question/336291614/answer/811272489



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6739753591239606795/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

相关阅读

最新评论

 最新
返回顶部
山东11选5开奖 极速赛车全天精准计划 v8彩票计划群 山东11选5 澳彩网彩票计划群 秒速赛车登陆 99彩票网址多少 彩客网计划群 GT彩票计划群 极速赛车官网开奖结果