栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

程序到底是什么。编译,链接,动态库,静态库之间的关系。

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序到底是什么。编译,链接,动态库,静态库之间的关系。

目录
  • 前言
  • 程序
  • 多进程和多线程的作用
  • 总结


前言

接触编程时,通常会将一些概念混淆。程序,进程,线程是什么?一个程序为什么按我们编写的代码逻辑执行?源文件,中间文件,可执行文件,动态库,静态库又是什么关系?编译链接又是在做什么?多进程和多线程存在的意义,内存分配又是怎样的?等。

本文针对以上问题做简要小结。


程序

程序:实际上是中间文件链接后的集合
 可执行文件+链接动态库 = 程序(总的可执行文件)

库为什么存在?
 答:为了链接的方便。因为一个大的工程往往源文件众多,由此生成的中间文件太多,一个个链接麻烦,所以给一些中间文件打了个包,生成库。
 静态库(linux下:.a,windows下:.lib):中间文件的集合,并已嵌入到可执行文件中
 动态库(linux下:.so,windows下:.dll):中间文件的集合,没有嵌入到可执行文件中,所以用的时候得链接

编译流程
 编译:源文件 => 中间文件
  预处理 -E:头文件展开,宏替换,条件编译,去注释
  编译 -s:检查语法后,c代码 => 汇编代码
  汇编 -c:汇编代码 => 机器码,生成.o中间文件
 链接:链接中间文件 => 可执行文件

程序是可独立运行的
 生成可执行文件后,便不再依赖源文件和中间目标文件就可以运行
 因动态库未嵌入到可执行文件中,所以一个程序除了可执行文件,往往会包含众多动态库文件。如:windows环境下,去查看一个程序的文件,往往会看到多个.exe可执行文件(对应多进程)和多个.dll动态库文件;linux环境下,多个可执行文件+多个.so动态库文件。

QQ程序:

进程 = 跑起来的程序
 程序的代码将存入内存的代码段中。将不在依赖原来的可执行文件,即此时把这个可执行文件删了,也不会影响此时的进程。


多进程和多线程的作用

多进程
 一个程序启动多个进程。一个程序启动起来本应该是一个进程,但它可作为父进程启动多个子进程。
 因进程是资源分配的最小单位,故一个子进程往往运行着一个新的程序。那么这一个程序启动起来后,又会启动多个新程序,就可以同时完成多个程序的功能。

多线程
 每一个进程,都有一个主线程,主线程可以启动多个子线程。
 因线程是程序执行的最小单位,故每一个线程对应一个执行流/工作流,如多线程用来处理高迸发的客户端请求


总结

本文是对程序、编译、多进程和多线程的个人理解,欢迎指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871514.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号