说一个程序,主程序就2行,很简单吧。但你到底懂不懂这个程序都干了些什么?
int a = 0;
cout<<a<<endl;
简单来说是申请了一个变量,然后输出,对啊!大一的小盆友都知道。
那我们从别的角度看看吧。
先说编译,算了编译太麻烦,跳过,就是直接生成的,假如是一个a.exe吧
这个a.exe用ultra edit打开,你看到的是什么?很复杂吧。
exe是windows的文件结构,到linux下面就不一样了,算了这些也省略了。
这个a.exe的实质是什么?是一个程序,废话!对这废话不是那么容易理解的。
这个程序首先在硬盘上,你运行程序,电脑做了什么?:
把程序装入内存
然后操作系统分配资源,开启一个新的线程
然后执行程序代码
然后退出操作系统收回资源
对吧,就几个步骤,但是你真清楚其中最关键的东西吗?
程序到底怎么运行的?
程序装入内存,以什么形式存储?
这里涉及到哈佛结构,把代码存到代码段,数据存到数据段。生成的exe应该已经把它分离出来了(不是很确定),分别存只是操作系统转移一下位置
把程序翻译成指令,让我看汇编指令吧,2进制的鬼也看不懂
算了还是变成自然语言吧:
先lea一下从内存取出数据
然后中断
然后输出,打印到屏幕是怎么回事呢?把数据转换成一个像素矩阵然后刷新屏幕,这个过程很复杂。
然后关中断
指令怎么执行,分多少步骤?组成原理有说
关于中断,微机接口有说
都不是一两句话能说清楚的。
现在你看到这两行代码能想到什么?如果不知道,还是研究研究吧。无论什么都没看到的那么简单。