静态和动态绑定之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 1 七月 2024
Anonim
Python9 4多态和动态绑定
视频: Python9 4多态和动态绑定

内容


“功能定义”与“功能调用”的绑定关联,或“值”与“变量”的绑定关联,称为“绑定”。在编译过程中,每个“函数定义”都有一个内存地址;一旦完成函数调用,对程序执行的控制就会移到该内存地址,并执行存储在该位置的功能代码,这就是“函数调用”与“函数定义”的绑定。绑定可以分为“静态绑定”和“动态绑定”。

如果在运行时之前就已经知道了,将调用哪个函数或将什么值分配给变量,则为“静态绑定”。如果在运行时知道,则称为“动态绑定”。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较图:

比较依据静态绑定动态绑定
事件发生在编译时发生的事件是“静态绑定”。
在运行时发生的事件是“动态绑定”。
信息在编译时就知道调用函数所需的所有信息。在运行时会知道调用函数所需的所有信息。
优点效率。灵活性。
时间快速执行。执行缓慢。
别名早期绑定。后期绑定。
重载函数调用,重载运算符。C ++中的虚函数,java中的重写方法。

静态绑定的定义

当编译器确认编译期间调用函数所需的所有信息或变量的所有值时,称为“静态绑定”。由于在运行时之前已知道所有必需信息,因此它提高了程序效率,并且还提高了程序的执行速度。

静态绑定使程序非常高效,但是却降低了程序的灵活性,因为在程序中预定义了“变量的值”和“函数调用”。静态绑定是在编码时在程序中实现的。


重载函数或运算符是编译时多态性的示例,即静态绑定。

用重载示例在C ++中实现静态绑定

#包括 使用名称空间std;类重载{int a,b; public:int load(int x){//第一个load()函数。 a = x; cout <<“ x的值为” <funct(); //上面的语句决定要调用哪个类的函数。 p =&d1; //指针的Vlaue更改。 p-> funct(); //上面的语句决定要调用哪个类的函数。 p =&d2; //指针的vlaue再次更改。 p-> funct(); //上面的语句决定要调用哪个类的函数。返回0; }

在这里,指针的值随着程序的执行而改变,并且指针的值决定了将调用哪个类的函数。因此,这里的信息是在运行时提供的,它需要花费时间来绑定数据,这会降低执行速度。


  1. 在编译时发生的事件(例如,功能代码与函数调用相关联或将值分配给变量)称为静态/早期绑定。相反,当这些任务在运行时完成时,它们称为动态/后期绑定。
  2. 静态绑定中的“效率”提高了,因为所有数据都是在执行之前收集的。但是在动态绑定中,数据是在运行时获取的,因此我们可以决定为变量分配哪个值以及在运行时调用哪个函数,从而使执行“灵活”。
  3. “静态绑定”使程序的执行“更快”,因为在执行之前就知道了执行程序所需的所有数据。在“动态绑定”中,执行程序所需的数据在执行时为编译器所知,这需要花费时间将值绑定至标识符;因此,它使程序执行速度变慢。
  4. 静态绑定也称为早期绑定,因为功能代码在编译期间与函数调用相关联,它比动态绑定更早,在动态绑定中,功能代码在运行时与函数调用相关联,因此它也称为后期绑定。

结论:

但是,我们得出的结论是,当我们具有变量和函数调用的值的先验知识时,我们将应用静态绑定。相反,在动态绑定中,我们在执行时提供所有信息。