分类:
2012-07-02 10:16:22
原文地址:linux下执行C程序背后的过程 作者:做早起的鸟
一个编译链接好的C程序,在linux上执行的过程:exec会使用brk()函数设置当前进程的数据段;然后打开预先编译时指定好的共享库的文件,并且把共享库加载到内存中;因为程序在编译的时候,默认是使用共享库的方式,只有加载了共享库到内存,才能保证程序执行的正确性;最后执行编写的代码执行。理解程序的执行流程,是以后学习和理解多进程和多线程程序开发的基础。
Linux系统有两种程序库,一种被称为静态库static library,在程序链接的时候,把库函数的目标代码和程序连接在一起,体积庞大;另一种是动态库shared library,即共享库。
共享库是linux系统最广泛的一种程序使用方式,它的工作原理是相同功能的代码可以被多个程序共同使用。在程序加载的时候,内核会检查程序使用到的动态库是否已经加载到内存,如果没有被加载到内存,则从系统库路径搜索并且加载相关的动态库;如果动态库已经被加载到内存,程序可以直接使用而无须加载。使用动态库可以减小应用程序占用的空间和加载时间。