• 运行库glibc


        运行时库(Runtime Library),可能某些和我一样的初学者不是很了解这个概念,但是运行时库有着十分重要的作用。

        下面来一段维基百科的解释:

        运行时库(runtime library,又称运行期库),在计算机程序设计领域中,是指一种被编译器用来实现编程语言内置函数以提供该语言程序运行时(执行)支持的一种特殊的计算机程序库。这种库一般包括基本的输入输出或是内存管理等支持。它是一群支持正在运行程序的函数,与操作系统合作提供诸如数学运算、输入输出等功能,让程序写作者不需要“重新发明轮子”,并善用操作系统提供的功能。 运行时库由编译器决定,以面向编程语言,提供其最基本的执行时需要。比如Visual Basic需要复杂的运行时库支持而C的运行时库则相对简单。当然这还是由编译器厂商决定的。运行时库中的函数可能对程序员透明,也可能不透明。这也是由编译器厂商忖度语言执行环境的需求而决定的。 早期的运行期库(例如Fortran)提供了数学运算的能力。其他语言增加了诸如垃圾回收的先进功能,通常用于支持对象数据结构。 许多近代语言设计了更大的运行环境并添加更多功能。很多面向对象语言也包含了分派器与类读取器。Java虚拟机(JVM)便是此类的典型运行环境:它也在运行期直译或编译具可携性的二进制Java程序。而.NET架构也是另外一个运行期库的实例。 异常处理(Exception handling)是专门处理运行期错误的语言机制,使程序员可以完全捕捉非预期错误,或没有适当处理的错误结果。 动态链接库或静态链接库与运行时库的分类角度不同,不得相提并论。

             作为一个C语言开发者,你是否想过,我们经常所使用的printf,memset等函数,其功能是谁帮我们实现的?又是如何做到可以在不同平台上兼容的?

    这一切都是运行时库的默默支持。

             任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能正常运行。这套代码至少包含入口函数,及其所依赖的函数所构成的合集。

    当然,它还理应包括各种标准库函数的实现。这样一个代码集合称之为运行时库。

             一个C语言的运行库,至少包含以下功能:

             --启动与退出:包括入口函数及入口函数所依赖的其他函数等

             --标准函数:由C语言标准规定的C语言标准库所拥有的函数实现

             --I/O:I/O功能的封装和实现,例如fopen等函数

             --堆:堆的封装和实现

             --语言中特殊功能的实现;调试代码的实现

            

             在这些运行库的组成部分中,C标准库占了大部分且大有来头。当我们使用printf,fread等标准库中的函数,在不同平台中移植代码时就无需考虑兼容性,

    因为标准库中的函数实现实际上是和不同平台绑定的,标准库就类似于C程序和不同的操作系统平台间的抽象层,它将不同操作系统平台的系统API封装成同样

    功能的函数实现。

             在Linux系统下,我们使用的运行库通常是glibc(GNU C Library),这是一个GNU旗下的C标准库。实际上glibc是C标准库的超集,即对C标准库进行了一

    些扩展,比如线程操作并非是标准的C运行库中的一部分,但是glibc支持了,即pthread库中的pthread_create等函数。

             在嵌入式linux系统中,为了节省空间,我们会使用uClibc运行库,这是一个面向嵌入式linux操作系统的小型C标准库。

             小结:运行时库其实本质是个就是个库,可能是动态的也可能是静态的,之所以称之为运行时库主要是因为库所提供的函数功能,比如提供基本的标准输入输出和内存管理,数学计算等许多底层功能,是程序运行时的底层支持。

          换言之,如果你为某系统开发了一个库,实现了基本标准输入输出,内存管理,数学计算等功能,其他应用在使用底层功能时可以直接调用库函数,那么你的这个库就是运行时库。运行时库使我们从重复造轮子中解放出来。

  • 相关阅读:
    5.4 类型转换
    IntelliJ IDEA 创建Web项目(全教程)
    Spring IoC 依赖注入的方法大全 XML配置方式
    20秒教你如何写maven2的pom文件的依赖包
    数据库面试题之COUNT(*),COUNT(字段),CONUT(DISTINCT 字段)的区别
    Oracle中的单行函数
    Select 子句后的别名,在where条件中不能使用
    Oracle SQL*Plus命令
    使用js请求Servlet时的路径
    idea 创建运行web项目时,报错: Can not issue executeUpdate() for SELECTs解决方案
  • 原文地址:https://www.cnblogs.com/Victor-Tian/p/7143753.html
Copyright © 2020-2023  润新知