程序是怎样跑起来的(8)
从源文件到可执行文件
我们用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。Windows中exe文件的程序内容,使用的就是本地代码。Dump是指把文件的内容,每个字节用2位十六进制数来表示的方式。本地代码的内容就是各种数值的罗列,而这些数值就是本地代码的真实面目。
将高级程序语言编写的源代码转换成本地代码的程序成为编译器。编译器首先读入代码的内容,读入的源代码还需要经过语法解析、句法解析、语义解析,然后再把源代码转换成本地代码。
程序加载时会产生栈和堆
当程序加载到内存后会生成栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据以及对象的内存领域。
栈和堆的相似之处,他们的内存空间都是在程序运行时得到申请分配的。栈中对数据进行存储和舍弃的代码,是由编译器自动生成的。使用栈的数据内存空间,每当函数被调用时都会得到申请分配,并且在函数处理完成后自动释放。而堆的内存空间,则要根据程序员编写的程序,来明确进行申请分配或释放。
windows编译及链接的机制
编译器:是指在程序运行前对所有源代码进行解释处理。用能把C语言等高级语言编写的源代码转换成本地代码的程序就叫编译器。
解释器:是指在程序运行时对源代码的内容一行一行地进行解释处理。
目标文件:指的是编译器生成结果的意思,如.c文件编译后生成.obj目标文件。
链接器:把多个目标文件结合,生成一个EXE文件的处理就是链接,运行链接的程序就是链接器。
库文件:指的是把多个目标文件集成保存到一个文件中的形式,链接器指定库文件之后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合生成EXE文件。
外部符号:指其他目标文件中的变量或函数。
标准函数:不是通过源代码形式而是通过库文件形式和编译器一起提供的。
静态链接库:存储着目标文件的实体,并直接和EXE文件结合的库文件形式称为静态链接库。
导入库:存储着两个信息,一个是函数存在某个DLL文件中,另一个是存储这DLL文件的文件夹信息的库文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现