CPU可以解析和运行和程序形式称为本地代码(机器语言代码),将多个目标文件结合生成EXE文件的工具称为链接器,把多个目标文件收录在一起的文件称为库文件,在程序运行时,用来动态申请分配的数据和对象的内存区域形式称为堆。
计算机只能运行本地代码,用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件,用C语言编写的源文件的扩展名通常是“.c”。对CPU来说,母语就是机器语言,而转换成机器语言的程序就是本地代码,用任何编程语言编写的源代码,最后都要编译成本地代码。
能够把C语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器,每个编写源代码的编程语言都需要其专用的编译器,将C语言编写的源代码转换成本地代码的编译器称为C编译器。编译器不仅和编程语言的种类有关,和CPU的类型也是相关的。交叉编译器生成的是和运行环境中的CPU不同的CPU所使用的本地代码。
仅靠编译是无法得到可执行文件的。编译器转换源代码后,就会生成本地文件,不过本地文件是无法直接运行的。编译后生成的不是EXE文件,而是扩展名 为“.obj”的目标文件。把多个目标文件结合,生成1个EXE文件处理就是链接,运行连接的程序就称为链接器。库文件指的是把多个目标文件集成保存到一个文件中的形式。链接器指定库文件后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合生成EXE文件。
当程序加载到内存后,还会额外生成两个组,就是栈和堆,栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是
用来存储程序运行时的任意数据及对象的内存领域。EXE文件中并不存在栈及堆的组,栈和堆需要的内存空间是在EXE文件加载到内存后开始运行时得到的分配的。无论是C语言还是C++,如果没有在程序中明确释放堆的内存空间,那么即使在处理完毕后,该内存空间仍会一直残留,这个现象被称为内存泄露,如果内存泄露一直存在的话,就有可能会造成内存不足而导致宕机。