这本书的第七章呢主要讲程序是在何种环境中运行的。运行环境=操作系统+硬件。程序中包含着运行环境这一内容。大家手头若是有购买的应用软件的话,可以稍微观察一下它的安装包或者目录。通常在某个位置会写有“运行环境”这一项。例如,2007Microsoft Office System(下文简称为Office2007)需要的运行环境。在表示程序的运行环境时,列出了Operating System(操作系统)和计算机的主机(硬件)两项,大家可以知道运行环境是这两者的综合。也就是说,操作系统和硬件决定了程序的运行环境。从程序的运行环境这一角度来考量硬件时,CPU的种类是特别重要的参数。
CPU 只能解释其自身固有的机器语言。不同的CPU能解释的机器语言的种类也是不同的。机器语言的程序称为本地代码(native code)。程序员用C语言等编写的程序,在编写阶段仅仅是文本文件。文本文件(排除文字编码的问题)在任何环境下都能显示和编辑。我们称之为源代码。除虚拟机的方法之外,还有一种方法能够提供不依赖于特定硬件及操作系统的程序运行环境,那就是Java。大家说的Java,有两个层面的意思。一个是作为编程语言的Java,另一个是作为程序运行环境的Java。同其他编程语言相同,Java也是将Java语法记述的源代码编译后运行。不过,编译后生成的并不是特定CPU使用的本地代码,而是名为字节代码的程序。字节代码的运行环境就称为Java 虚拟机(JavaVM,Java Virtual Machine)。Java 虚拟机是一边把Java字节代码逐一转换成本地代码一边运行的。
第八章主要是从源文件到可执行文件。首先CPU可以解析和运行的程序形式称为本地代码(机器语言代码),可以通过编译代码得到本地代码;其次将多个目标文件结合生成EXE文件的工具称为链接器,然后通过编译和链接得到EXE文件;接下来扩展名为.obj的目标文件的内容也是本地代码,通过对源文件进行编译,得到目标文件。例如,C语言中,将Samplel.c这个源文件编译后,就会得到Samplel.obj这个目标文件。目标文件的内容是本地代码;紧接着库文件是可以把多个目标文件收录在一起的文件,链接器会从库文件中抽取出必要的目标文件并将其结合到EXE文件中。此外,还存在一种程序运行时结合的DLL形式的库文件;其次导入库是仅包含Windows的DLL文件中存储的函数信息的文件。把导人库信息结合到EXE文件中,这样程序在运行时就可以利用DLL内的函数了;最后呢在程序运行时,用来动态申请分配的数据和对象的内存区域形式称为堆。堆的内存空间会根据程序的命令进行申请及释放。