00:00
已经对这个两个开发环境已经简单的介绍了,那我们看一下这个C语言到底是如何编译成一个可执行程序的呢?那这里面是经过了四步代码可以编译成可执行,腾讯那这里面做了四步操作,我们看看都做哪几步操作,一步是预处理编译,然后是汇编和链接,经过这四步之后,那我们就生成。生成了一个可执行程序,那其实在这什么,在我们这个变异的时候,都怎么都是一步变异的,就是怎么的这四步,虽然说它会经过这样的一过程,但是我们看到都是一步,就哪一步就是GC-O1步完成编译,那我们可以通过什么,通过这个之前的这个命令来看一下,就GC这个命令里面都有哪些操作啊,或者哪些这个呃参数呃杠O,然后后面加上费,直接这个编译成这个成功啊,这是第一种,还有一种是杠大E,这个杠大E是什么呀,只进行预处理操作,然后还有什么呀,杠大S这里面做什么做的是。预处理和编译小写的C啊,只进行预处理和编译和汇编啊这些操作,那这样情况最后会怎么样形成一个可执行程序,那我们这里面就是怎么呢,把我们这个。
01:04
呃,我们再写个程序,把我们的程序从头到尾一步步来给大家演示一下它是怎么变成一个可执行程序的,那我们的呃,重新来过啊。那这里面分为四步编程,那我们可以看一下,那我们先写个程序啊,同样这里面我在这个。呃,Linux里面去操作啊,你这里面或者用或者用这个,因为我在讲课的时候,这个怎么的,这个更更那个方便大家去观看啊,所以我就用这个了,CD0223斜杠D03L。长按项啊,这里面有a.C b.C那我们是VI。我们就用a.C来演示吧,是不是啊,我看一下via.c啊,这是我们之前写的一个程序啊,这里面虽然很多有注释啊,但也无所谓,那这里面怎么的,这里面我们需要让他经过每一步来去看一下这个到底生成了一个什么样的文件,它是一个什么样的一个执行过程。而不是一步变异了,那这里面我们先做一下这个第一步叫什么,叫这个预处理,预处理是GCC杠大E,然后哈点C-O看一下,注意一下这是两个参数啊,然后是hello.i生成了一个文件叫哈点I的这个文件,来看一下它操作啊。
02:14
GCC,然后杠大E,然后是。a.C然后是杠O,然后是a.I注意一下,这是快点I啊,我执行一下。来看一下这里面多了一个什么,多了一个这个文件,那你看这个文件大小多大呀。啊呃,别别不是一万多行啊,这个可不是行,这是什么,这字节吧,是不是跟之前跟你们说过了吧,那这是什么,这个是我们的这个原始的这个程序程序程序程序大小是不是。原始程序大小,那我们看一下这个A点,这个文件是一个什么样的格式,通过什么样去查看呢?通过这个feel a.I啊。Fail a点去查看一下,说这里面现在这个还是个什么程序啊,A点是一个UTF杠八无符号,呃,Unicode就是无符号的,然后是C语言的文本文件,是不是还是C语言的源码文件,那我们看一下这里面的内容到底什么样的,那我们可以通过VI打开了,因为它是一个文本文件嘛,是不是a.I。
03:15
执行一下,诶,发现这里面怎么样,这个这个代码里面怎么样,多了好多东西,那设置一个number。看一下有多少行啊。嗯,看一下。啊对,大哥大,大哥到哪儿啊。大哥是到行尾是小哥哥到什么到行首是吧,那我看一下我们这个代码多少行了多这个是。862行是不是,咱们明线代码是多少行,是这个六行代码是不是再加注释是多少行,24行是不是大家都背下了是不是,那结果看一下我们这个代码,现在一下突然多了多少行,多了这个。至少800多行吧,是不是,反正多了多少也算不出来是不是,那我们看一下这个我们文件已经定位到文件尾了,但。单看一下什么呀,单看一下这个文件的这个我们能看懂地,其他的咱们也可以滚动一下啊,其实你也看不懂也无所谓了,能看懂是不是还是这几句啊,看一下诶,发现除了第一句,第一句我们写啥了。
04:12
井号in includede,然后是scbo.h,除了那句话没有之外,还有一些东西没有了,什么没有了,我写的很多行注释是不是没有了,然后其他这个代码是不是还还存在这儿啊,是不是我之前写的时候把这个,呃,把这个括号拿到下面来,是不是它也可以是在这啊啊,那我们现在剩了几行代码,是不是还剩一行两行,这个空格不算啊,一行两行,三行,这算三行四行五行是不是这个还是这五行代码呀,头文件没了,注释没了,那这里面我们看一下他做哪一操作啊,他主要做的就是头文件展开,哪是头文件呢?RTDL.h是个同文键,它把它展开了,你看下这个里面有这个操作啊,看一下诶没写吗。啊写了吧,应该是你看预处理做操作是哪个操作宏定义的展开,咱们这里面现在还没学宏定义呢,是不是,呃宏定义它也会给你展开,同文件的展开,咱们是什么呀,咱们是把这个头文件是不是给给他这个变成了一个很多文件了,他就把原他就要把什么呀,把这个我们之前那个头文件里面对应的是一个点H的是不是一个文件呢?他把那文件全部拿到这个程序里面来了,知道了吧,所以说我们程序变大了,知道吧,啊一下800多行就是头文件做,呃头文件啊作的作用。
05:26
编译条件,这个这个条件编译啊,这是什么意思啊,就是这个我们在这个程序编译的时候,它会选择一个编译的库,是不是咱们刚才上午也给大家讲了,C89和C99是不同的,这个库是不是这两个库它就怎么呢?选择一个这个你在你你使用的这个库是不是系统默认情况下,就给你选择,不用你选择,那就给你做到这步,还有一步什么,还有一步是同时将代码中的注释。删除看到了吧,删除掉了是不是都没有了吧,一行都没有了,所以说你你在程序中写再多的注释,程序是怎么的,读不懂的是不是,他也不会去给你读,你写注释是给谁看的,是给人看的,是不是给你其他的这个同事看的,或者是你给自己看的,是不是,你过两天之后看一下这个代码什么意思,自己可能不会了,但是看下注释啊,立马就明白了是什么意思啊。
06:12
高雅这里面还说了一句话,说这里面。并不会检查语法,什么叫语法啊,就是我写程序的时候,如果出现错误了会怎么的会报错,但这里面怎么不会给你检查语法,就是无论写对不对,它都能经过这一步,就是哪一步,就是杠大意生成了一个表I的文件,我们称为叫什么预处理的文件啊这种,但是这个预处理文件我们能读懂吗?能读懂。差不多能读懂吧,就除了这些之外,你是是不是是不是还和你原代码基本上没有任何的改变的,除了第一行之外,你展开的这些东西你也知道是展开图文件就可以了,是不是,那你是能读懂的,而且它是一个什么文件呢?是一个文本文件嘛,是不是,那这是第一步是预处理做了几件事,我们看一下宏定义的展开,那我们一会可以写宏定义啊,还有什么头文件的展开,同件展开,咱们是不是已经看到效果了吧?还有是编译条件,编译条件没没有怎么条件编义啊,条件编译虽然说它这里面没有给你具体去声明,但是这个系统已经选择了它对应的编码这个库,就是这个建U的这个库,是不是啊啊,同时将代码中注释删掉几几个事儿啊,一个事儿两事儿,三事儿,四个事儿,是不是啊,这里面说明有一句说明是什么,不检查语法啊,他做的事。
07:22
那他做完这个事儿之后,那就怎么着,这是我们生成一个文件,那这个文件也可以怎么着,再继续往下编译,再继续往下走,那就变成哪一步了啊编译。编译它做什么工作呢?看一下是检查语法,那比如说我们这里面写错了的时候,那是在哪能检查出来啊,是不是在编译的时候能检查出来啊,啊编译能检查出来啊,将将处理后的文件转成什么文件呢?汇编文件是不是啊,那你比如说你想学习汇编文件,是不是你自己写个代码,那你我经过怎么预处理和编汇编译之后,就生成了一个什么汇编代码,是不是你自己想学的时候,你自己之前写代码,你知道啥意思是吧?是在对照着汇编,是不是看一下上下的是不是就能融会贯通了啊,就是变成汇编与汇编文件,那我们看一下它的执行过程是什么样的,这里面也有啊,我看一下是汇编是杠大S,然后这里面杠O生成一个什么文件呢?
08:14
点S的文件需要通过哪一步文件去生成的啊,上一步上一步生成那个I文件,然后这里面放在这儿,然后这里面生成一个点S的,那我们试一下啊,把这个代码给大家保存一下,然后是看一下这个文件还存在。GCC杠大S,然后是。a.I然后是杠oa.s这是生成这个文件吧,执行一下没有问题,是不是因为我代码没写错是不是?那好,那为了这个写错的情况下,我再改点啊via.i执行一下我跳到这个文件最后一行,这个想改错很容易是不是啊,那就前面加一个。再加个字母就好了啊,随便加字母就好了,加个I形可以就可以了吧,好,那我们再再怎么呢,再去编一下这个文件,哪个文件呢?就是呃a.I这个文件我刚才改的是不是A点啊,那好,那然后这是a.S执行一下,他告诉你这个程序怎么出错了吧,出错他也告诉你出错在哪一行,看一下看一下啊,这里面出错字在哪一行是他是用哪个文件告诉你的。
09:15
a.C的这个文件a.C这个文件是对应的是多少行啊,18行,然后第一个字母说这个未知类型一个I就多了一个东西,是I啊,他说错了,那我们回头找这个什么呀?via.c能找这里面东西吗?来看一下,能找这么东西吗?找不到是不是啊,因为我们改的是哪个,改的是这个a.I这个是吧,我们把a.I这个改对就可以了,VI a.I因为我们程序一般情况下会怎么的,会这个从上到下一步执行了是不是啊,他找的还确定这是还是哪儿啊,原文件里面的东西啊,所以说你要注意这个问题改一下。把这个给它干掉就可以了,删除保存一下,那再执行一下。没有问题了吧,那我们看一下多没多文件,多了一个文件是什么?是这个a.S看一下大小多大。
10:04
486原版文件多大?724,那这里面是怎么呢?就是现在转成什么语言了,选成汇编语言了,是不是,呃,汇编语言了是不是会比之前的要怎么少很多,那我们打开看一下这个什么呀,这个文件可以通过fair a.S看一下这个文件类型什么类型啊阿斯格码了,那这里面就到这为止就不再支持什么中文了吧,是不是这完全是阿斯码一种编码格式了啊是一个program,然后是一个文件,这是汇编汇编程序的一个文件啊啊叫。我们一般把这个汇编检索为这个asm,就是这个汇编文件啊,那我们也可以打开看一下这个文件里面内容啊是什么,是via.s打开哇,这里面就变成什么了,变成这样的一个结构了吧,那我们看一下我们写代码写了哪哪几句了。呃,首先得先要找找到什么呀,主函数吧,呃,主函数那就是好好,呃就是慢是不是,那你看我这个程序名称什么什么这个东西啊,这里面有一个什么,有一个hello word,那我这是什么,这这个是我那个字符串是不是,那你看它定义是定义什么类型的,是点s string是不是就字符串类型是一个什么,Hello,呃不是hello word,那我们这里面看一下程序的一个运行过程啊,是不是它这里面做了一些这个。
11:19
呃,操作是不是整个这个push啊,什么木啊,什么and呀,呃萨呀,这里面做很多操作,那最终结果就怎么,就是显示了我们这里面的一行的内容是什么内容啊。一行内容,什么内容?Hello word是不是啊,你这个现在就能看懂了吧,这个是汇编语言,大家看懂了啊,当然不是这么简单啊,不是这么简单,这只是跟大家说明一下,现在你看不懂无关啊,这里面你看啊,这这个你能不能懂,就是我现在画这个你能不懂EA啊,我今天早晨的时候给大家看了一眼而已,就看了一眼。啊,寄存器是不是大家知道寄存器了吗?啊对,知道寄存器就行,这里面就是和那个什么,和那个内存什么相关的,和那个CPU相关的,都会在这里面去显示了,这是汇编语言啊啊那现在编译完这个文件之后啊,我们能读懂吗?
12:05
读不懂是不是,其实这个如果说你有时间,呃是长时间的这个,呃,这个什么代码的阅读能力之后,你就发现这个能读懂了,是不是会汇编之后能读懂,那到现在为止就是,就比如说我们现在到哪了,到这个编译了,编译之后代码是生成一什么生成一个汇编语言了吧,是不是,那我们到这为止它还是。是什么语言呢?是这个属于这个人能读懂的那种语言,是不是至少来说不是那个二进制是不读懂啊,根本就那这个是我们这这一步是什么,是一部纯是这个什么纯的是文本文件吧,或者是那个程序文件,他做操作也没做其他操作,就是给你的程序这个修检页做一些这个编幅操作,是不是那第二步就怎么转成汇编了啊到这儿那第三呃第三步什么第三步就是什么汇编。这个会边杠小C,然后是什么生成的一个文件是什么点O的文件,这是什么,这是点S的,然后生成点O的文件,那我们看一下这个操作是什么样的,是把这个保存一下。
13:02
GCC杠什么了,大写小写的什么C,然后是a.S-oa.o啊这样的一个文件啊,执行一下啊执行一下这个,因为这个我在这里面就是在这个生成什么呀,生成这个点S文件的时候,就检查什么语法了吧,到这情况下就会一步的编译成功,并且不会有任何的出错了,就你在这如果检查语法没有错误情况下,那还会出现另外一种错误就是什么?就是运行式错误,程序运行起来之后,我们才知道是错误是不是啊,那一般情况下程序会有几种错误呢?跟大家说一下,就是编译时异常。啊,编译实际常就什么,就什么叫编译实异常呢?就是那个你编译就没编译通过去,是不是就是证明你之前写的有问题,那一般情况下我们用的什么用的这个VS或QT,它会把一些这个你出现的错误给你用这个下波浪线给你打出来是不是啊,那证明你这个什么出现错误了吧,啊它就给你打出来,那比如说你多一个字母,它就给你小小波浪一下,说这个错了,它能给你帮你检查一下语法,至少让你在什么在这个。
14:05
哪一步啊,在编译的时候,尽量让你怎么不出错是不是啊,那如果是怎么的,如果是这个程序编译完成之后,那出错情况下是很正常的,是不是那个是我们这个控制不了的,那之前的情况下能控制,然后所以说这个编译器会给你提示,那到这步是什么汇编。汇编之后,我们看一下这里面做操作啊。呃,到哪执行完成了吧,生成一个文件是哪个文件,点O的文件,呃,点文件多大了。1024是不是一级棒是不是,然后可以通过这个费看一下a.o的这个文件是一个什么样的文件,那现在告诉你是一个什么是一个这个。嗯,32位的一个什么,一个就是这里面是一个二进制文件,是一个但是执行不了的二进制文件,为啥呢?因为它没有去连接很多那个库文件知道吧,为什么是没有连接库文件就执行不了了呢?你记不记得我们用了一句话叫什么叫stdo.H导入的是什么?导入的头文件图文件里面并没有把这个代码具体的实现写在什么上面,写在那个程序上面去知道吧,而是需要你系统中的很多库一链接过去,那库里面就是什么代码实现,是不是有图文件自动能找到这个库是不是,那这样情况下,就我们在打印的时候就才能把这个东西打印到我们界面中去知道吧,所以说这里面生成这个文件,我们看一下能不能看懂啊,via.o。
15:27
那全是面积圈圈了吧,这把是不是你真看不懂了吧,那我看下,但是有些单词你也能知道是不是hello word是不是你还你还能见过啊,你看他告诉你这个编译的情况,什么乌班图啊,多少多少版本的是不是都有啊,这就是那个咱们第一步说那什么条件编译吧,是不是啊,在哪平台下编译的啊,都有啊,但是像这种的你是不是就不知道了吧?啊对,而且这是二进制啊,二进制的这一个东西可并不一定是什么,可并不一定是一个东西啊,可能是八个呢。啊,你先这么理解一下,行啊,后面给大家讲啊,这还有什么,在MN我还能读懂几个是吧?a.C这是我的文件是不是啊,它包含了一些文件信息在里面,但是我们到这儿为止就已经不再能读懂文件了,到这为止就生成了什么文件呢?汇编之后就生成一个二进制文件了,是不是二进制文件,二进制文件我们就读不懂这个文件的具体内容了。
16:16
那看一下还有最后一步,我们所说的什么链接,就是刚才说的把所有的库放在这里面来,就是你调用系统函数那些什么功能拿过来,那我就可以怎么样实现了吧?呃,实现了看一下怎么怎么个成功方式啊,是GCC后面什么也不用加,然后是哈点O,就是我们上一步生成这个东西,然后是杠O,这里面你你把它理解就理解为什么一个哈点exe能不能这能不能理解这意思啊。啊,你不要跟我纠结那单词啥意思,怎么这个为什么会生成一个这样的东西啊,你想叫什么名就叫什么名,这东西我不会给你们解释啊。很多同学问我,你特别烦?好,那我们在还有一步什么GCC,然后是a.OA点零了,这是a.oa.o然后是杠OA点什么A没了是不是,或者A点什么那个叫E什么EF是不是,你就随便起个名就叫uf了a.EF。
17:10
一执行是不是没有问题啊,那我们看一下这个里面东西啊,生成了一个是a.EWF,它它是什么呀?它是啊可执行的文件是不是,那我们可以运行一下,是不点斜杠A杠。EE。RF执行一下是不是还是hard word经过了这一漫长的步骤之后,它也能执行行一下啊,那我们看一下这个具体的每一步都做了什么样的功能啊,咱们刚才已经是这个看了一下功能,那么再从头再来,除了第一个咱们说完之后,第二个是什么?检查语法,将预处理后的呃文件编译成汇编文件,到这为止,编译的时候就已经成汇编文件了,是不是啊,然后汇编之后呢,是将汇编文件转成目标文件,也就是我们所谓的二进制文件,看的时候都是什么呀?小圈圈是不是啊。最后一步干嘛呢?最后一步是将C语言的这是什么程序啊,需要的这种库全依赖上去,那这样情况下才能变成一个真正的可执行的程序,知道吧?啊,那我在这里面给大家画图啊,辅助大家理解一下。
18:10
比如说这里面这这个东西是我的源码啊,源码文件是叫C语言源码文件啊,你就不用管它是什么东西了,反正知道它的结尾是什么,是这个点C为结尾的,这是它的。源码文件下面都是代码,是不是我做了一步操作之后,它变成什么东西了,就是做了一步操作。啊啊,我要做了一个操,这步操作叫什么操作叫预处理,好像没对齐是不是。啊,我下一点啊。这个处女座的同学得骂死老师,我们自己在心里就骂他啊,这叫什么,这叫预处理。预处理,预处理啊,预处理然后变成什么样的东西了,他做哪些操作,将这个源码文件变成做哪些操作啊,我们看一下啊,这是源码文件,然后他做了一些操作,做一些操作在下面给记录一下,第一个操作做什么操作啊,展开的文件,展开头文件啊,展开文件就是将你导入了什么井号一录什么那东西加进来啊,第二步做什么操作啊。
19:17
啊,删除注释啊,这个咱不用这个那个啥也行,删除除注释啊,第三步条件变异是不是。责建编译是哪些东西啊,就是把那个什么,每个平台下面多少多少,这个平台下面还分这32位操系统,64位操系统是不是全加进来啊,还有什么,还有那个是你编译的这个库是不是全加进来吧,还有一个什么,第四个什么。那是不是还有一个是宏定义的展开,是不是宏定义的展开啊,咱们后面学宏的时候也可以啊,一会我给你写一个也行啊,这是做了这步,这步之后生成了这个文件,变成什么样的文件了是。呃,这个是非语言源码文件,同样这个前面这块咱们还给它这个,呃,剪切下来,就这块咱们可以拿过来用,然后生成了一个是点什么的文件啊,点I的文件啊,点的文件。
20:09
点I。点文件啊。好,那这里面我们这个命令什么,就是这个它从这一步到这一步的命令什么,我们写一下是GCC杠什么大意了吧,大意然后是呃杠大E啊不是那个下划线大E杠大意然后是什么,然后哪个哪个文件呢?嗯呃,这个文件比如说还叫就叫a.C吧,呃,这个方面啊a.C然后是杠o a.I啊是经过这一步这个什么呀,这个命令啊,命令写在这啊,给它放在这,我们用红色表示一下啊,这样为了方便来看到这一步是预处理,那预处理完成之后我又做了哪些操作啊。No。
21:04
好,预处理完成之后变成什么了?变异了吧,变异啊,这是变异。编译,那编译对应的是哪一个文件,是不是我要把这个文件去拿过来去操作了吧,然后给它把它这个呃,复制一份放在我们这个上面。他做了哪些操作,这里面做了第一步操作是检查语法吧,嗯,检查。语法这第一步操作,第二步操作呢。啊,是不是呃将文件呃或者将将代码吧,将代码呃将这样写吧,将高级语言。转成汇编语言。嗯,转转成会员语言,这是做这两步操作吧,然后生成的一个文件变成啥样的文件了。呃,是呃,C。
22:02
语言。源码文件,然后是点。点S,那经过经过的是步骤是哪一步啊,我们写在上面啊,就是这个命令执行的命令是GCC,杠大什么呀?GGCC。杠大S,然后是a.I-o a.S啊这一步啊,那我把它也是标成红色,那再去处理一下。再下一步呢?好像放不开了是不是,那往这边挪一挪是不是,诶走走走走你。没事啊,这颜色能调啊。然后到这步变成什么了,汇编了吧,啊汇编。汇编是用哪个文件,是不是用下面这个文件,点C这个文件了吧,啊不是点S这个文件,CTRLCCTRLV给他拿到这来,这是第一个,他做哪个操作呀。
23:07
将将什么将这个将汇编语言转。转化为。转化为这个机器语言啊,机器语言不要叫二进制语言,二进制本身不是一种语言,知道吧,啊,它不是种语言,它做是不是就这一个事儿啊,它就没有其他东西了吧,然后生成这个文件是什么文件了,是这个,呃,C语言。码文件,然后是点O的了吧,是吧,是点O,那是这经过这哪步啊是这个。GCC,然后是杠C,然后是啊,不是不是杠C是A点杠oa.so啊注意一下这个过程。然后最后还有一步,还有一步什么是这个链接链接链接什么链接库了吧,嗯,库。
24:05
因为大家知道这个库吗?就是这个了解了解过这个库吗?不了解是不是,如果大家说过一个,大家可能立马就知道了,比如说这个你在运行某个程序的时候,他说那个文件中缺少一个DLL的一个东西,能记得吗?就是这个,那个就是什么呀,那个库啊,我们称为叫Windows中的什么呀?动态库是不是动态链接库是不是啊啊,这个叫链接。啊,当然咱们上去夜班的时候,也会领大家去写那个链接库啊,那块也会领大家去写这个DLL的东西啊。啊。然后这里面经过是哪,呃,怎么操作的,看一下把这个先复制一下啊,这个是点文件。然后到放到这儿,然后生成的什么,生成一个是可执行的文件了,就点exe的了,那那我们就是这就不能再叫那个源码文件了,这应该叫什么叫这个。叫叫可执行文件点exe啊,这微联你区分一下啊嗯。
25:02
其实到这为止就不能再C语言源码文件了,为啥?因为这个就是二进制的,就已经怎么看不懂了吧,你在这之前来说都可以叫C语言源码文件,为啥能看懂,至少是是不是,那么这个咱们这个知道一下就行,咱就不改了啊,这里面是,呃,做了一件事,知道哪件事是。连。链接啊,链接不同。操作系统下的库文件啊。这里这里面什么?这里面这个是我们在这个Windows和这个linus里面,它链接的库是不同的,这给大家说一下它是不是一样的啊,它是两个不同的库啊,那这里面经过哪部代码来实现呢?是GC,然后是a.S然后是杠O。a.exe为啥你区分一下加个exe啊啊稍点是a.o等一下我改一下是a.o。
26:00
AO,这是我们一个编译的过程,是不是经过几步啊,是不是这个一步两步,三步四步,是不是因为源码文件是我们自己写的,你不能说说经过啊,那也可以,怎么呢?一步编程,一步编程是什么?一步编程。啊,一步编程大家都会了吧,一步编程。编程啊编程或者叫一步编译吧,一步编译更更准确,一步编译是GCC,然后是杠O,然后是a.a.exe啊。Exe,然后是a.C啊,啊不要搞混啊a.C啊,把这个放大一下啊,让大家去知道一下。这是一步编译的一个过程,那这到现在为止是不是就是我们变成一个可执行程序了吧,这有问题吗?这个同学说这个最后一个有问题吗?没有了啊,如果有问题,您可以说一下,我们把这个图保存一下,那这是一步编程,编程之后变成一个什么程序了,变成一个这个是呃,可执行的程序。啊是零一笔记。
27:05
那那我们把这个给它粘粘贴下来啊,这个叫什么叫程序编译过程啊,这个编译过程,程序编译。过程,那除了这个过程之外,我们还有一个过程,这也需要给大家演示一下。这叫什么呢?叫程序的执行过程,什么叫执行过程,就是从硬盘唤醒,然后是怎么着,然后去它的一个执行过程,这给大家画图啊,那这个一面画的时候一面给大家讲就可以了,这因为书上没有给大家拓展一下啊,这什么叫程序的执行过程。那程序咱们刚才编好了一个叫什么,可程序点exe吧,可执行程序点exe能把这个改小一点啊。啊,叫A点1SE啊也行,那我们叫可直乘1.1SE吧。啊,这个就是我们可执行程序,可执行程序是在哪存着呢。在哪里存账,是不是编辑好一个文件在硬盘中存着呢,是不是,那我把这个是存储位置给他说一下啊,这个是我们用这个圈给他好像存储的。
28:10
啊,用一个圈存着,这是什么?这是我们所谓的这个叫,呃,叫Y存储器是不是,那我们先说一下它的学名啊,叫Y存储器。存储器,然后它叫什么,它叫硬盘是不是啊,当然你这个如果存在这个盘中,或存在这个,呃,就是那个移动硬盘中都可以,是不是都会拿来直接能运行啊,所以说我们叫外存储器啊,我们给它理解为什么硬盘那程序怎么会被唤醒起来呢?程序被唤醒了,经过下一步唤醒。嗯。啊,我们一般情况下是不是就对对他来说唤醒就是什么过程啊,是执行的过程,是不是或调调用不对啊,是执行的过程是不是一般情况下,我们如果在Windows中有什么双击,是不是就打开了,是不是啊就是这个过程啊,就是它的执行过程,那它它唤醒到哪了?它唤醒到我们这个叫。
29:00
啊,内存中是不是啊所有东西,诶,哎呀。建议的啊,呃,这里面换醒到内存中,那我们这一个可执行程序,它不是说把整个东西全部都拿到内存中,那我们俩这先写一下,这叫内存属线。内存储器啊,就俗称的叫内存吧,是不是内存啊,那它不是把这个所有东西当拿存中,而是怎么着,而是把这个他在编译的时候就把这个东西给切割好了,这里面我先给你简简单切割一下,就是这样,就是这种的EEE。啊,当然我们也看不到啊,是不是它切割什么东西了呢?比如说这个代码区的一块它切割出来了是不是啊,呃,数据区的一块切割出来了,比如说我们这个,哎呀换好好像那种就是呃那个什么就是这个,比如说一些是个数据是不是啊,比如什么数据啊,比如说一些静态数据啊,动态数据啊,是不是切割出来了,然后那些其他的这个东西切割出来了,然后这个临时的变量切割出来了,他把这程序切割了好多份,知道吧,切割好多份,虽然说都在一个程序中,EXSE程序中存着呢,是不是啊,但是它唤醒到我们内存中的时候,它存的位置也是把整个程序分散开存的,不是存在一块儿了,知道吧?啊,没有这么方便存在一块儿了,是分开存的,那把这个撤销一下啊。
30:18
你知道是这样的一个切割个的过程就行,然后这里面会有很多区啊,我们到到那个就业班的时候,也会给大家讲什么呀,讲这个内存四驱这个模型啊,我们暂时理解为叫内存四驱就可以了啊啊这里面给大家画一下啊。内存,那这里面我们先画个内存四驱的模型图啊,后面也会具体把这个东西给你去讲一下。四驱啊,就我给你写一下,就内存四驱啊啊。内存四驱。啊是三啊,不是你那个四驱车那个四驱啊。啊,那都有哪四区呢?跟大家说一下是什么,是这个。系统区是不是,这你自己猜的吧,有这什么,有这个代码区,呃,代码区就是我们所说的计算机指令,就前面都是说那个指令是不是,那是放在代码区的,还有什么,还有这个叫数据区是不是啊,数据是用来存放这个数据的,还有这个是叫。
31:15
站区还有什么?还有这个是堆区啊,你咱们先有这个印象行,这是内存四区,它把一个程序分割开来,放在不同的这个里面去知道吧,啊,但是一般情况下,这个每个程序都有自己独立代码区和独立的这个站区,那这样情况下,这个你唤醒这个程序之后是怎么操作都可以啊,那这是它的一个唤醒到内存中的一个模型图。然后呢,唤醒到内存中,这个程序执行起来了吗?没有是不是。排队,然后运行那些咱就不说了,咱就说他在。唤醒到内存中之后,它会将一些数据怎么的去转化一下,再回到我们什么中啊,回到我们内存中,那这是一个跟谁交互的过程,跟这个。CPU交互的过程,那我们再把这个下面这个图给他画一下啊,是再画个蛋蛋。
32:06
三个单子就够了,嗯。啊,这里面还有听器啊,器在这这样画一个就可以了,好一会儿给你说一下啊,这个东西它怎么的,它是。往什么往这个呃,CPU里传数据了,那传数据的时候呢,是怎么传呢,你看下画的箭头,就是怎么知道这里面还有一个什么的回环,是不是啊是不是啊回环。一个是什么,一个是我要处理数据了,处理数据的这个内存,它没有处理数据这个能力,知道吧,内存是给谁让就把数据发送给谁啊进行处理啊,CPU去处理,那这里面还有我们画的应该是一个什么呀,这个CPU。这个CPU咱们前面看的已经给它分区了,分成几个区了,这个是CPU啊,就是叫中央处理器吧,中央处理器啊,这个中央处理。She。T。那我们这中央处理器里面都有,都有哪哪哪哪几个比较重要的东西啊,我们说一下。
33:03
啊,运算器寄存器还有什么,还有控制器是不是,那这里面那我怎么画呢?嗯。但一般情况下,这个讲的时候,我们都把什么都把这个叫呃寄存器给它游离出来,什么叫游离出来呢?就是我们不把它当做中央处理器去看待,为什么呢?那那个虽然也是这个处理处理这个什么处理这个数据的,但是寄存器你一听这个名字就怎么就是什么意思啊,G就暂时的意思吧,是不是暂时存储这个数据的,为什么要暂时存储数据啊,是不是,那CPU是功耗是有一定能力的,是不是,我同时假如说能处理五个数据是不是。哎,那很多数据都在这怎么的排队列队的是不是啊,等着来处理呢?就相当于什么,相当于这个快递一样,是不是啊,那个CPU就相当于送快递的一样,是不是来送完这个快件再送那个快件,再送这个快件,是不是把所有的快件派发下去才可以是不是?那如果这个我北小车这个快快递不是备校车,是骑个小车送快递,是不是我得先送怎么的,先送这个,呃,第一个给我发来的人,就是我先把他快递送过去吧,然后再送第二个,再送第三个是不是,但是我的这个数据可能怎么的,就是我有很多数据他怎么的,他会暂时存储我这块,这就是什么?这是我们所说这个叫寄存器,或者一般情况下,我们都把这个寄存器游离出来,放在哪呢?放在是。
34:19
这一块告诉这是暂存,暂时存储的,而CPU它的主要是做什么,做这个这俩字是用的处理,用的是不是那哪哪哪哪个哪就是哪俩功能,一个是。运算器是不是那运算器。啊,一个是。控制器啊,当然这个我们还有说这个寄存器也写在这里面也可以啊,寄存器这是它的这个功能,他把数据怎么呢,从这个内存中拿过来,是不是处理完之后再给谁呀。在传到内存中里去是不是,然后程序就是如果一个可执行程序就应该是在他这里两两个里面怎么着,来来回回的这个操作是不是啊,这个是它的一个执行过程啊,当然执行完成之后,比如说这个数据需要存储了,我的程序关闭了时候,他还会怎么的,还要把数据再给它放到硬盘中是不是啊,那这个我们就不不考虑这个了,当然这俩考虑的时候,我还需要加一个东西叫什么叫总线。
35:18
总线这个名词听过吧,啊,听过没听过情况下,你如果预习了,你应该知道什么叫总线吧,是不是,那下面有这个关于这个寄存器的什么呀,这个他们的一些这个区别,那一会儿我们再去看这个,我们先知道有什么有这个东西,这个总线就相当于发送的一个什么这个线程一样,是不是我给你发一个,给他发一个,给他发一个是不是就是就相当于物流那个线程一样,那会咱们说啊,这是程序的什么过程啊这样。执行过程是不是那个编译过程就叫程序执行过程,找地方写一下啊。嗯,写这儿吧,啊,程序执行过程。过程那是这样的一个情况,我把这保存一下啊。第一个叫程序编译过程,叫程序执行过程。
36:06
嗯,是。
我来说两句