C++语言零基础入门教程:2.8 从代码上看程序生死周期(生死循环,生命周期)

4205 人浏览 | 时间: 2015-10-04 14:28:11 | 作者: codexia 会员文章,禁止转载

    前面的几节课中,我们已经简单的介绍了第一个程序的基本知识框架。这些东西是我们在后面代码中经常使用的,我想你应该清楚了吧。

    循环周期动态图
    好的,那么我们现在来看看这个程序的生命周期。生命周期这个词,看上去很高大上,通俗点说就是一个程序的生死。那什么叫做程序生,什么叫做程序死呢?
    这里在代码方面来阐述一下程序的生和死。程序运行于CPU中存储于内存中时,才表示程序是活的。当程序执行完毕退出后,就从CPU撤出执行,也从内存中撤出存储的东西,这样程序就死了。
    在系统使用方面来看,我们双击exe启动一个程序,然后操作exe完成一些工作,然后关闭退出程序,然后就找不到这个程序的进程了。这样程序就经历了一个生死周期。exe文件是程序的物质基础,exe里存储了程序运行时需要的代码和数据,但是这个文件本身并不代表程序,只能说是程序文件。只有这个文件被系统载入内存,被执行了,exe文件里的数据就在内存和CPU中活跃起来,这样就产生了一个程序活体。我们看到的程序,都是活体,否则我们根本就不知道程序的样子。
    我们写代码,生成程序文件时,编译器等就根据我们的代码,根据设定的生成规则,将代码编译链接创建了一个exe文件。而exe文件里的代码数据都是可以给计算机执行的格式。所以,以前的病毒经常在exe文件中嵌入一段代码,这样在exe文件被执行后,病毒代码就被当做正常代码执行,结果电脑中毒了。
    exe只是一个扩展名,和txt扩展名类似的。一般的文件,叫做数据文件,比如1.txt、1.doc,这些文件用来存储数据。而exe文件也可以说是一种特殊的数据文件,它的数据就是计算机执行的指令和执行需要的程序数据。不过,系统把exe这类文件当做可执行文件,有特别的对待。我们双击txt这类文件,系统根据扩展名来启动关联好的程序,从而来打开这个数据文件,显示数据内容。而双击exe文件,则默认启动系统的程序加载器来打开exe文件,不过,exe文件的数据并不是给我们人看的,而是加载进内存,给CPU执行的。所以,我们双击exe文件叫做执行程序,而不叫打开文件。系统给exe文件默认的行为就是执行。如果你将txt这类数据文件设定执行权限,那必然是有问题的,基本就是病毒等不良公民,系统是不会让它运行的。
    我们在双击exe文件之后,系统启动程序加载器,将exe文件的内容加载到内存,有的小exe文件数据会一次性加载到内存,而很大的exe程序,则会根据情况先只加载需要的一部分,然后根据情况再加载。
    在加载到内存后,要为它创建一个进程。进程是程序文件数据在内存中的存在空间,这个进程空间就是内存中分配给这个程序的一段空间。这一段空间可以存储这个程序文件的数据和代码。
    更准确的说,加载器会先分析exe文件的合法性和需求,如果满足要求,则会启动对应的运行时库。运行时库就是系统执行一个程序代码的中介。
    加载器创建进程和启动运行时库,而具体引导代码执行到入口函数则由运行时库来完成。因为一个系统的程序可以由很多工具编写,不同的工具,格式有所不同,C、C++、C#等,都是不一样的。所以,系统设计者不会傻到去在系统级别将自己固定为一种开发工具生成的格式的,这样会极大限制了系统的可扩展性。如果限制了开发工具,那么系统中的软件数量就会很少,从而系统竞争力就不强了。扩展性也不好,对系统发展不利。而系统给运行时库提供标准的接口,需要的话,系统就可以顺利执行对应的运行时库,不同的运行时库都很清楚他们自己的程序格式。C++运行时库

当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。