美文网首页
延迟绑定

延迟绑定

作者: 元哥830 | 来源:发表于2017-02-17 11:56 被阅读22次

在动态链接下,程序模块之间包含了大量的函数引用(全局变量往往比较少,因为大量全局变量会导致模块间耦合变大)。所以在程序开始执行之前,动态链接会消耗不少时间用于解决模块之间的函数引用的符号查找以及重定位,这也是我们上面提到的减慢动态链接的第二个原因。不过可以想象,在一个程序运行过程中,可能很多函数在程序执行完都不会被用到,比如一些错误处理函数或是一些用户很少用到的功能模块等,如果一开始就把所有的函数都链接好实际上是一种浪费。所以ELF采用了一种叫做延迟绑定(Lazy Binding)的做法,基本的思想就是当函数第一次被用到才进行绑定(符号查找、重定位等),如果没有用到则不进行绑定。这样的做法可以大大加快程序的启动速度,特别有利于一些大量函数引用和大量模块的程序。ELF 使用PLT(Procedure Linkage Table)的方法来实现,这种方法使用了一些很精巧的指令程序来完成。

看到这里想到了iOS 中NSObject类的+load和+initialize这两个方法。

在程序启动时,Runtime会去加载所有的类。在这一时期,如果类或者类的分类实现了+load方法,则会去调用这个方法。

而+initialize方法是在类或子类第一次接收消息之前会被调用,这包括类的实例对象或者类对象。如果类一直没有被用到,则这个方法不会被调用。

基于这两个方法的特殊性,我们可以将类使用时所需要的一些前置条件在这两个方法中处理。不过,如果可能,应该尽量放在+initialize中。因为+load方法是在程序启动时调用,势必会影响到程序的启动时间。而+initialize方法可以说是懒加载调用,只有用到才会去执行。

相关文章

  • 延迟绑定

    在动态链接下,程序模块之间包含了大量的函数引用(全局变量往往比较少,因为大量全局变量会导致模块间耦合变大)。所以在...

  • iOS 系统的延迟绑定机制

    延迟绑定机制是指将符号的绑定工作推迟到符号第一次被程序调用的时候。为了大家更好地理解延迟绑定的概念以及我们为什么要...

  • PHP静态延迟绑定

    1、什么是静态延时绑定 1)自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内...

  • static延迟静态绑定

  • Python陷阱

    可变的默认参数 for 循环i 的数值+闭包的延迟绑定

  • 2018-11-06day6-BOM相关操作

    一、轮播效果 二、事件绑定方法 三、绑定事件的两种情况 四、延迟跳转 五、按钮事件 六、轮播效果改进

  • 动态链接和延迟绑定

    现在的程序几乎都是动态链接了 + 延迟绑定了. 这样可以节省宝贵的内存空间还能提升运行时的效率. 之前也零零散散地...

  • PHP的'静态延迟绑定'

    今天,几个朋友在一起吹牛逼,一个朋友问我什么是静态绑定,我当时懵逼了,后面回来一查,这玩意儿不就是以前写代码的时候...

  • JavaScript中的this对象

    首先,this对象是在运行时基于函数的执行环境绑定的,是发生在调用的时候。这个“超级”延迟绑定(very late...

  • Unity的延迟渲染(一)

    本文不是延迟渲染原理的陈述,阅读本文之前,建议先了解了延迟渲染的底层实现原理:替换帧缓冲,绑定缓冲附件之类。 哪怕...

网友评论

      本文标题:延迟绑定

      本文链接:https://www.haomeiwen.com/subject/qtchwttx.html