a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 0

[综合辅导] linux指导:linux下执行C程序背后的过程

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
一个编译链接好的C程序,在linux上执行的过程:exec会使用brk()函数设置当前进程的数据段;然后打开预先编译时指定好的共享库的文件,并且把共享库加载到内存中;因为程序在编译的时候,默认是使用共享库的方式,只有加载了共享库到内存,才能保证程序执行的正确性;最后执行编写的代码执行。理解程序的执行流程,是以后学习和理解多进程和多线程程序开发的基础。$ d; z: |6 V- P. Y) \  l' S
   
' o; x& k* h6 ~. s# L7 ^    Linux系统有两种程序库,一种被称为静态库static library,在程序链接的时候,把库函数的目标代码和程序连接在一起,体积庞大;另一种是动态库shared library,即共享库。: C6 Q+ j% I% }) R% ~, t) `
    5 ]$ f9 }3 |" `- a1 U9 }8 x
    共享库是linux系统最广泛的一种程序使用方式,它的工作原理是相同功能的代码可以被多个程序共同使用。在程序加载的时候,内核会检查程序使用到的动态库是否已经加载到内存,如果没有被加载到内存,则从系统库路径搜索并且加载相关的动态库;如果动态库已经被加载到内存,程序可以直接使用而无须加载。使用动态库可以减小应用程序占用的空间和加载时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 13:47 , Processed in 0.201413 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表