编写的c程序是怎么运行的


我是一个学物理的学生,有个不是很好的习惯,什么东西不把它的前世今生搞明白了就特别难受,接触计算机语言的时候,看着自己编的c语言代码执行了,但是总是有种蒙在鼓里的感觉,计算机这个东东是怎么执行的我的指令,于是我就开始搜寻一些资料,从微机原理开始,一步步,虽然还有些地方不懂,但是大体可以搞明白了,

我向来喜欢用大家熟悉的模型来解释专业术语,我思考了好多的模型,感觉企业的生产很像这个计算机的执行过程。就让我们看看这个计算机怎么执行的命令。

冯诺依曼当时二十世纪四五十年代的时候搞出来的计算机的模型,我感觉这个家伙应该是按照当时的小作坊模型来思考的计算机模型,我要完成一辆车的生产,那么我先要设计图纸,从车的外形结构、内部的布置,等等,这些就好比是我们的写的c程序,c程序仅仅是一些符号,靠这些生产不了汽车,必须按照这些符号找到他的材料(编译),当时生产速度很慢,所以把流水线和材料都放一块了,这里的生产速度就是cpu的频率,流水线就是代码区(指令区),物料区就是数据区,物料区也分为工人(这里的工人当做物料),工具(钳子之类的),这里的工人就是数据段(静态变量,全局变量),这代码段必须在整个流水线一直存在,材料就是一些随用随拿的东西,就是堆栈段,它的特性就是动态的随用随拿,不会一直放在流水线上,而且中间产生的零件放在这里,便于后面用,这大概就是冯诺依曼的机构,后来随着生产速度越来越快,车间就那么大,这里的车间就是整个计算机的内存,你把物料什么跟工人放在一块,太乱了,造成了工人跟物料的冲突,就是取代码和数据的冲突,这时你可能想到了,靠,为什么不把工人跟物料分开,建一个物料存储车间,和一个生产车间,然后用一个小型的车负责中间把物料及时的送到车间生产,聪明你!这就是哈弗结构,哈弗结构把代码段和数据段分开了,但是问题来了,生产线越来越快,我们的小车送的也是不给力啊,再说送的时候也是很费劲的,同样浪费时间,这就是数据总线跟指令总线分开的困然,这就是好比我们控制一只手大脑还行,要是控制两只手分别干不同的事我们的大脑就反应不过来了,这里的一只手是数据总线,一只手为指令总线,你也可能会说,这有什么麻烦的,把车间整的很大,多用工人不就可以了,可是车间整大花很多的钱啊,想想多了工人的开销,新的流水线,没办法,到现在大部分的电脑还是老冯的结构,但是我们在车间内部还是用了小车,这个小车就是通常的一级二级缓存,这个小缓存就是哈弗结构。

全局变量(工人),静态变量(工具)必须一直在线程上(流水线),而且他们的位置一直不能变化,生产过程的需要的材料螺丝(局部变量)中间产生的零件车门(堆栈段),可以来回移动,子函数就是生产零部件的,整个车生产出来,线程结束,所有的物料重新归位,工人如果没有其他的生产(其他的线程程序)可以回家了,所有的中间零件全部清空。
  理解了这些我们就会明白为什么我们的子函数经常传的是址而不是值,子函数在整个工程中生产的是零件,在流水线上大的零件的输入必须是它前面加工的零件,如果我们不传入他的地址,子函数就不知道处理哪个东西,处理完后所有的东西全部弹出,子函数的局部变量不再存在。

特别说明:可能某些地方我理解的不好,寄存器没有写进去,大家有什么好的可以继续添加。
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值