计算机只能运行本地代码(母语的)。用某种编程语言编写的程序称为源文件,保存源代码的文件称为源文件。用C语言编写的源文件的扩展名为.c。源代码无法直接运行是因为CPU能直接解析并运行的不是源代码而是本地代码。那么本地代码的内容就是罗列各种数值。每个数值表一个命令和数据。所用的是原始的Dump程序。
编译器就是能够把C语言等高级编程语言的编写的源代码转换为本地代码的程序。编译器负责编译源代码。还有一种交叉编译器,它生成的是和运行环境中的CPU不同的CPU所使用的本地代码。仅仅靠编译器呢是得不到可执行文件。为了得到可运行的exe文件,编译之后还需要链接(把多个目标文件结合,生成一个exe文件的处理)处理。运行链接的程序就叫链接器。库文件是指把多个目标文件集成保存在一个文件中的形式,链接器指定库文件后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合起来生成exe文件。
Windows以函数的形式为应用提供了各种功能,这样形式的函数被称为API,API的目标文件不是存储在通常的库文件中而是存储在名为dll文件的特殊库文件中。
可执行文件运行的必要条件:在程序运行时,虚拟的内存地址就会转换为实际的内存地址,EXE文件会在EXE文件的开头追加转换内存地址所需的必要信息,这个信息成为再配置信息。那程序加载时就会出现栈(存储函数内部临时使用的变量)和堆(存储程序运行时的任意数据及对象的内存领域)。二者的内存空间都是运行时得到申请分配的。栈中对数据进行存储和舍弃的代码是由编译器自动生成的,不需要程序员参与,而堆则需要根据程序员编写的程序来进行申请分配或释放。