程序是怎样跑起来的(8)

从源文件到可执行文件
我们用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。Windows中exe文件的程序内容,使用的就是本地代码。Dump是指把文件的内容,每个字节用2位十六进制数来表示的方式。本地代码的内容就是各种数值的罗列,而这些数值就是本地代码的真实面目。
将高级程序语言编写的源代码转换成本地代码的程序成为编译器。编译器首先读入代码的内容,读入的源代码还需要经过语法解析、句法解析、语义解析,然后再把源代码转换成本地代码。

程序加载时会产生栈和堆
当程序加载到内存后会生成栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据以及对象的内存领域。
栈和堆的相似之处,他们的内存空间都是在程序运行时得到申请分配的。栈中对数据进行存储和舍弃的代码,是由编译器自动生成的。使用栈的数据内存空间,每当函数被调用时都会得到申请分配,并且在函数处理完成后自动释放。而堆的内存空间,则要根据程序员编写的程序,来明确进行申请分配或释放。

windows编译及链接的机制

编译器:是指在程序运行前对所有源代码进行解释处理。用能把C语言等高级语言编写的源代码转换成本地代码的程序就叫编译器。
解释器:是指在程序运行时对源代码的内容一行一行地进行解释处理。
目标文件:指的是编译器生成结果的意思,如.c文件编译后生成.obj目标文件。
链接器:把多个目标文件结合,生成一个EXE文件的处理就是链接,运行链接的程序就是链接器。
库文件:指的是把多个目标文件集成保存到一个文件中的形式,链接器指定库文件之后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合生成EXE文件。
外部符号:指其他目标文件中的变量或函数。
标准函数:不是通过源代码形式而是通过库文件形式和编译器一起提供的。
静态链接库:存储着目标文件的实体,并直接和EXE文件结合的库文件形式称为静态链接库。
导入库:存储着两个信息,一个是函数存在某个DLL文件中,另一个是存储这DLL文件的文件夹信息的库文件。

posted @ 2024-02-27 16:54  ༺ཌ༈枫祁༈ད༻  阅读(1)  评论(0编辑  收藏  举报