了解程序的编译和链接过程

在说这个之前,先说一下冯·诺依曼结构:
冯·诺曼结构处理器具有以下几个特点:必须有一个存储器;必须有一个控制器;必须有一个运算器;必须有输入和输出设备。这个是计算机的结构。
在这里插入图片描述
(图片来自百度百科)
程序的安装:把程序的镜像文件放到存储设备上。
程序的运行:操作系统会找到程序的镜像文件在磁盘上的位置,然后把它加载到内存中,接着cpu就会在内存中一条一条地取指令去执行。
一个程序包含文本段(存放的是可执行文件的命令)、数据段(存放的是初始化的全局变量和静态变量)、BSS段(存放的未初始化的全局变量)、程序运行的时候还会分配堆栈空间(不是编译时分配的)。
下面我们再来谈一谈图片的编译链接过程。
在这里插入图片描述 (图片来自百度图片) 一、.c和.cpp文件在开始的时候有一个预处理,就是把宏定义、条件编译、头文件都处理掉,把要包含的东西包含进来,把宏全部替换掉。 二、通过编译器编译成汇编代码.s文件。 三、通过汇编器编译成目标代码.o文件。 (上面这三步都是以文件为单位,即一个hello.cpp文件只会编译成一个hello.o文件) 四、若有其他的文件,如other.cpp,编译生成的other.o文件,通过链接器把这些.o文件组装到一起(若有库的文件,则会在这一步也把库代码组装到一起)。 五、组装好的.o文件就是我们的可执行程序了。 静态库:直接添加到可执行程序里面了,动态库:不把代码添加到可执行程序里面,只有在运行的时候才会找到代码的地址,然后去执行。动态库的好处是节省程序所占用的空间(比如调用这样一段代码100000次的时候)。 如有不足,欢迎指正!