《程序是怎样跑起来的》第8章

第八章主要讲从源文件到可执行文件。看每章节中我都会先从课前问题来看起。因为我觉得这些问题很有价值。从问题中我知道了CPU能解释和执行的程序叫本机代码(机器语言代码),将多个目标文件拼接成一个EXE文件的工具是连接器,扩展名.obj的目标文件的内容本机代码,由多个目标文件打包而成的文件叫库文件(library file),程序运行时动态分配的内存地址是堆(heap)。
同时我知道了什么是源代码和源文件:用某种编程语言编写的程序称为源代码,将源代码保存成一个文件就称为源文件。但是源代码只是普通的文本文件,windows自带的“记事本”等文本编辑器就可以编辑。而且源代码也是不能直接运行的,因为CPU能直接解释和执行的只有本机代码。CPU是计算机的大脑,它只能理解本机代码,所以呢,只有翻译成本机代码才会被CPU执行,然而不同编程语言所编写的源代码翻译成本机代码之后就变成了同一种语言(机器语言)。
问题来了,那么用什么来翻译源代码呢?哈哈哈,顾名思义,当然使用编译器啦。
同志们问题又来了,什么是编译器呢?负责将用高级语言编写的源代码翻译成本机代码的程序称为编译器。
编译器会读取源代码的内容并将其内容翻译成本机代码,大家可以大致理解为编译器中有一张源代码和本机代码的对应表,但实际上仅靠对应表是无法生成本机代码的。编译器需要对读取的源代码进行词法分析、语法分析、语义分析等处理,这样才能够生成本机代码。
在EXE文件中,变量和函数被分配的内容地址都是虚拟的,在程序运行时,这些虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头记录需要进行内存地址转换的各个位置,这些信息被称为重定位信息。重定位信息中记录的是变量和函数的相对地址。

posted @   申晨  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示