首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

zOS中的动态链接

是一种在操作系统中实现模块化和可重用性的技术。它允许程序在运行时动态地加载和链接共享库,以便在程序执行过程中使用这些库中的函数和资源。

动态链接的主要优势是减少了程序的内存占用和启动时间。相比于静态链接,动态链接可以将共享库的代码和数据加载到内存中的一个实例中,并由多个程序共享使用。这样可以节省内存空间,并且当共享库更新时,只需要更新库文件而不需要重新编译和链接整个程序。

动态链接在各种应用场景中都有广泛的应用。它可以用于构建大型的、模块化的软件系统,其中各个模块可以独立地开发和更新。此外,动态链接还可以用于插件系统,允许用户在不修改主程序的情况下添加或删除功能。

腾讯云提供了一些与动态链接相关的产品和服务,例如:

  1. 云服务器(CVM):腾讯云的虚拟服务器实例,可以在上面部署和运行支持动态链接的应用程序。了解更多:云服务器产品介绍
  2. 云函数(SCF):腾讯云的无服务器计算服务,支持使用动态链接库。可以将函数代码和依赖的库打包成一个函数包,然后在需要时动态加载和执行。了解更多:云函数产品介绍
  3. 容器服务(TKE):腾讯云的容器管理服务,支持在容器中运行使用动态链接的应用程序。可以使用容器镜像来打包应用程序及其依赖的库,并在需要时动态加载。了解更多:容器服务产品介绍

总结:动态链接是一种在zOS操作系统中实现模块化和可重用性的技术。它可以减少程序的内存占用和启动时间,并在大型软件系统和插件系统中有广泛应用。腾讯云提供了云服务器、云函数和容器服务等产品来支持使用动态链接的应用程序的部署和运行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++调用C语言写成的动态链接库

C++在语法上是兼容C的,但是这不代表使用C语言不做任何处理直接写成的动态链接库就可以被C++给调用。由于C++引入了函数重载的机制,而这个机制的实现是在编译器层面的。编译器在“生成”函数符号信息时,不能仅仅通过函数名,因为重载函数的函数名都是一样的,所以它还要根据函数参数,命名空间等信息来确定唯一的函数签名;而C语言没有函数重载机制,C语言编译器在处理的时候通过函数名就可以唯一确定一个函数。这就导致C语言和C++语言生成的函数签名是不同的,故不能不做任何处理直接调用。下面我们来看一下C和C++编译同样一段代码为动态链接库以后的,它们的函数符号信息有什么不一样。

02

延迟绑定

动态链接的确有很多优势,比静态链接要灵活得多,但它是以牺牲一部分性能为代价的。据统计ELF程序在静态链接下要比动态库稍微快点,大约为1%~5%,当然这取决于程序本身的特性及运行环境等。我们知道动态链接比静态链接慢的主要原因是动态链接下对于全局和静态的数据访问都要进行复杂的GOT定位,然后间接寻址;对于模块间的调用也要先定位GOT,然后再进行间接跳转,如此一来,程序的运行速度必定会减慢。另外一个减慢运行速度的原因是动态链接的链接工作在运行时完成,即程序开始执行时,动态链接器都要进行一次链接工作,正如我们上面提到的,动态链接器会寻找并装载所需要的共享对象,然后进行符号査找地址重定位等工作,这些工作势必减慢程序的启动速度。这是影响动态链接性能的两个主要问题,我们将在这一节介绍优化动态链接性能的一些方法。

02

【CSAPP】深入理解计算机系统 第九章 虚拟内存 动态链接 printf 17/26

这里有一个小问题,就是从上面的图中可以看到静态运行库里面的一个目标文件只包含一个函数,如libc.a里面的printf.o只有printf()函数,strlen.o里面只有strlen()函数。 我们知道,链接器在链接静态链接库的时候是以目标文件为单位的。比如我们引用了静态库中的printf()函数,那么链接器就会把库中包含printf()函数的那个目标文件链接进来,如果很多函数都放在一个目标文件中,很可能很多没用的函数都被一起链接进了输出结果中。由于运行库有成百上千个函数,数量非常庞大,每个函数独立地放在一个目标文件中可以尽量减少空间的浪费,那些没有被用到的目标文件就不要链接到最终的输出文件中。

02
领券