1). 库是一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的.它们通常由一组相互关联的函数组成以执行某项常见的任务. 库文件的名字总是以`lib `开头,随后的部分指明这是什么库,文件名的最后部分以` . `开始,然后给出库文件的类型: □ .a 代表传统的静态函数库; □ .so 代表共享函数库
2.)静态库: 函数库最简单的形式是一组处于 "准备好使用" 状态的目标文件.当程序需要使用函数库中的某个函数时,它包含一个声明该函数的头文件. 编译器 和 链接器 负责将程序代码和函数库结合在一起以组成一个单独的可执行文件. 当同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一个函数的多份副本,而且在程序文件自身中也有多份同样的副本.(这将消耗大量宝贵的内存和磁盘空间)
共享库: 当一个程序使用共享库时,程序本身不再包含函数代码,而是引用运行时可访问的共享代码.当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载到内存中. 通过这种方法,系统可以只保留共享库的一份副本供许多应用程序同时使用,并且在磁盘上也仅保存一份. 共享库在许多方面类似于Windows中使用的动态链接库.`.so`库对应于`.DLL`文件,它们都是在程序运行时加载,而`.a`库类似于`.LIB`文件,它们都包含在可执行程序中.
静态变量: 静态变量是指存储在静态区的变量,这些变量从定义开始就占用着内存,知道程序结束,因此它的内存地址是固定不变的. 相对于动态变量,即存放在堆中和栈中的变量,它们占用的内存都是动态申请的,因此内存地址不是固定不变的,而是动态改变的 静态变量分为静态局部变量和静态全局变量两种; 静态变量可以在局部定义,这样的变量叫做静态局部变量; 静态局部变量和局部变量的区别是: 局部变量不会一直占着内存,当函数结束时,局部变量所占用的内存就会被释放,但是静态局部变量会一直占着内存,直到程序结束. 因此当函数调用结束后,局部变量的值有可能被其他值所覆盖,而静态局部变量的值仍然保存着,并作为下次调用该函数时该静态局部变量的初始化值.
静态全局变量: 静态变量可以在全局定义,这样的变量叫做静态全局变量,假如不给静态全局变量赋一个初值,那么编译时自动赋初值为0. 将静态全局变量的关键字static去掉,就是全局变量,全局变量的作用域是整个工程,在工程的一个文件内定义的全局变量,在该工程的另一个文件中,通过extern声明,就可以使用全局变量.
注意:全局变量与静态全局变量的存储区相同,都是存储在静态区.