程序源代码是静态的,只有运行起来才发挥作用。
编译运行是最经典、高效最高的运行方式。C/C++的高性能在很大程度上归功于编译。用编译语言开发一个软件要经历的过程是:编辑、编译、链接和运行。
编辑就是用程序设计语言编写的源代码。

用C语言简单打印hello word的源代码
1.编译运行
编译器:
简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。
编译:
编译 是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。
如果程序员编写的源代码有错误,通常指语法错误,那么编译器会报错,并停止编译。因为它读不懂源代码,不知道该转成什么。一些聪明的编译器还会找出程序中逻辑上的问题和不安全的地方。当遇到编译器给出错误提示时,就要分析出错误的原因,重新修改代码后,再重新编译。如此往复,知道编译成功为止。
链接:
链接也称超级链接,超链接是指从一个网页指向一个目标的连接关系,而在一个网页中用来超链接的对象,可以是一段文本或者是一个图片.当浏览者单击已经链接的文字或图片后,链接目标将显示在浏览器上,并且根据目标的类型来打开或运行。
使用超文本,链接(link)是从一个词、图片或信息对象到另一个的可选连接。在像万维网这样的多媒体环境里,这些对象可能包括声音和动态影像序列。链接的最常见的格式是高亮显示的词或图片,它们可以由用户选择(用鼠标或其他方式),形成直接传输和产看其他文件。高亮显示的对象涉及到锚定。锚定引用和涉及到的对象构成超文本链接。
链接过程很简单,有时候甚至完全体会不到,所以很多人习惯上把它也算作编译的一部分。在这个过程中,链接器把用户用户程序和支持它运行的必要的其它程序都“合成”在一起,形成最后的可执行文件(DOS和Windows下扩展名为.exe的文件)。可执行文件里面都是执行代码,也就是机械语言代码。全部转换过程完毕,用户就可以把这个文件复制给别人用了。通常,使用者并不需要程序的源代码,有这个可执行文件足矣。使用者唯一要做的就是运行它。
不要以为程序能运行就可以了。运行时还会出现错误,开发者必须捕获这些错误,并修改源代码的错误,重新编译、链接,最终交付无错的可执行文件。有些错误很快就会被发现和及时发发现和及时修改;有些错误则隐藏很深,很长才会被发现,例如著名的2000年问题———千年虫。
2.解释运行
最具有代表性的是BASIC、JavaScript、PHP、Python等语言。这些语言的共同特点是运行速度慢但简单。
用这些语言编写程序在运行时必须先运行一个解释器。解释器能够读懂这些语言,按照程序指令一步一步地工作,完成开发者需要的功能。因为必须一条一条地解释语句并执行,所以速度很慢,比编译语言要慢数十倍甚至上百倍。因为解释器的功能可以做得很强,并且可以把计算机的复杂性隐藏起来,所以这类语言都比较易学。
解释语言简单好用,获得了大量的的支持者。甚至有人预言,它将完全替代编译语言。说这样话的人好像忘了这样一件事,那就是解释语言的编译器几乎是C/C++开发的。编译语言的编译器、链接器可以用编译语言编写,然而解释语言只能借助编译语言发展。
解释语言还有一个致命伤——源代码必须交给用户。对把源代码视作最高商业机密的软件企业来说,这简直是自砸饭碗,不会有人愿意这样子做。因此,有人预言,解释语言的生命力不会长,不过他也错了。现在,解释语言已经是高级语言中不可或缺的一部分。它在web开发和应用软件脚本扩展等领域发挥着巨大作用。通过法律的保护,人们已近不再特别介意源代码的保密,甚至有人愿意公开源代码与人交流。至于速度问题,一方面,因为硬件性能提升、成本下降,硬件瓶颈不再突出;另一方面,解释语言也采用了很多提高速度的办法。有一种办法是:解释,后解释。
Java和C#语言都是先编译,后解释的。编译器并不把它们编译成机器代码,而是编译成一种中间代码(Java语言中称为字节码,C#语言中称为MSIL),当然,这个中间代码必须在其平台上运行。Java语言提供的平台称为JVM,它纯碎靠解释字节码来运行程序;C#语言的运行平台称为CLR,它并不是一个纯碎的解释器,而是翻译器,把MSL代码翻译成机械代码,再运行它。它们都要有平台才能运行,所以它们都比编译语言慢,Java语言比C#语言更慢。但它们具备解释语言最大的好处——简单,而且只需经过一次编译,避免了源代码的传播,非常适合开发大型应用软件。
2.内存
程序在运行是和数据一起保护在内存内,有CPU执行。
程序和数据都是以二进制方式存储的,存储的单位是字节(Byte),每台计算机的内存都能存储一定字节数的内容。通常,每个存储单元能保存一个字节。
内存的每个单元都被分配一个唯一的整数,称为地址。这就像着宿舍一样,用地址就能找到你要找的地方。
持续更新......